perm filename CKP.MAC[CH2,ALS] blob
sn#516485 filedate 1980-06-17 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00052 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00007 00002 TITLE CKP CHECKERS 6/8/77
C00011 00003 PLAY PLAY1 PLAY2
C00016 00004 GET GET2 GET1Z GET1A GET2A GET3
C00021 00005 GET4 GET4B GET4A GET5 GETF1 GETF2 GETF3
C00024 00006 SET PRUCT
C00027 00007 SET0A SET0B SET1A SET1B SET1 SET2 SET2A SE2 SE3 SE4 SF1 SF2 SF3 SF4 SF5 SET2C SET3 SET2B SET4 SET5 SET6
C00033 00008 SET7 SET7A SET8 SET8A TRESP TRESS SET9 SET9A SET10 SET11 SET12
C00037 00009 SET21 SET21A SET21D SET21B SET21C
C00040 00010 EXIT EXIT2 EXIT1 LOST WON
C00042 00011 FINDM FIND FIND1 FIND2 FIND3 FIND4 FIND6 FIND7 FIND8 FIND9
C00044 00012 MA MP MK MRF MLF MLB MRB MSKIP ME ME2 MMOVA MMOVP MOVA MOVP MVAA MVPP MOVAA MOVPP MMSKIP GTCNT0 GTCNT PRUC COUNTZ DEPTHZ MOVXZ COUNTX BPTR BPTRO PSKIP BRUSH MOVX TRF TLF TLB TRB TSKIP TE TE2
C00047 00013 OVA OVP OVK OVRF OVLF OVLB OVRB OVSKIP OVE OVE2 OVMOVA OVMOVP FLZZ FLX2 IA IP IK MOA MOP MOK MORF MOLF MOLB MORB MOVES MOJ BPLY BSKIP BZ DEPTHM TIMEX DEPTH U2MAX COUNTM PRUZ SA SP SK STEM FLIT EEBFLF LOADTA LC RFILL DFILL DSAVE
C00050 00014 PL1 PL2 PL2B PL3 PL4C PL4D PL4A PL4E PL4B PL5 PL5A PL5E PL5B PL1TAB
C00057 00015 PL5C PL8 PL4ERR PL14 PL13 PL13A PL10Z PL10 PL10A
C00060 00016 PL16 PL11
C00062 00017 PL17 PL18 PL18D SORT13 TRETM PL17A
C00066 00018 PL17B PL17D PL17C TREM TREOVM SORT14 SORT15 TREOV
C00069 00019 SORT16 SRT16Y SRT16Z SRT16X SRT16E SRT16F
C00072 00020 SRT16C SRT16D SORT17 SORT18 SORT19 SORT20 SORT21 SORT2A SORT22
C00075 00021 PL19 PL20 PL21 PL22 MERGE MERGE2 MERGE3 MERGE4 MERGE5 MERGE6 MERGE7 MERGE8 MERGE9 MERG12 TREMRG
C00079 00022 SETUPA SETUPB SORT SORTA SORT1 SORT2 SORT3 SORT4 SORT5 SORT6 SORT7 SORT8
C00083 00023 TIP TIP1 TIP1A TIP1B TIP1C TIP1D TIP3 TIP4
C00087 00024 TIP4A TIP5 TIP5A TIP5E TIP5C TIP5B TIP6 TIP6A TIP6B TIP7 TIP7A TIP8 TIP10
C00091 00025 SETT3 SETT5 TWIGT TIPTOV TIPT TIPT2 TIPT3 MAS
C00093 00026 GTREE STREE FLTREE TRTRE
C00095 00027 RETREE TREES TREES2
C00097 00028 SOUT SOUT2
C00098 00029 TREEX TREE UPNUMS UPNUM RAD UPNUM0 UPNUM1
C00100 00030 CTELLC DEBUG TELLC MTRE TREE1 TREE2 CORR
C00103 00031 TREEMP TREMP1 TREMP3 TRESTR TREST2 TREST3 BUFFX BUFFF BUFFF2 BUFFF3 BUFF
C00106 00032 MOVIN MOVIN0 MOVIN1 MOVIN2 MOVIN3 MOVIN4 MORE MOVIN5 MOVIN6 MOVIN7 MOVIN8 MKMOV MKPLAY
C00112 00033 MOVOUT MOVOUX MOVOUY MOVOUZ SUM SUM1
C00116 00034 HEAD SAVBD RECOUT RECIN RECORD GAMESV IMP
C00118 00035 ACCEPT ACC ACC1 ACC2 ACC3 ACCMOV MOVIT
C00122 00036 GO ERRGO PB PW SETB SETW BTERMS WTERMS PC SIG PORT PDP16
C00126 00037 BDOUT AGAIN AGAIN1 BDOUT1 BDOUT2 CRLFCK PPLUS BORDER PSTAR PHYFEN PBM PBK PWM PWK
C00130 00038 BOUT BOUT0 BOUT1 BOUT2 BOUT3
C00132 00039 LEGM LEGM1 SETLEG EOG TREOUT DSTREE LPTREE TRESET TREFIX TREFI2 TREFI3 TREFIZ TRCHAN TRFILE TREOFF INOUT
C00137 00040 PLAYBS PBS D W SETPAR
C00141 00041 TELPAR REPLYD PLAUSD STEMD PLAYD PLDPT
C00143 00042 CSFLAG TELLDW TIME RUNT CRUNT CDIFF DIFFT DIFF TOTAL CTOTAL TELLS TELLS2 NUMIN
C00146 00043 FSTCR CRFST
C00147 00044 MUP RF LF LB
C00150 00045 OVUP OVUPRF OVUPLF OVUPLB
C00153 00046 MACROS FOR SIGNATURE_TABLES
C00154 00047 NEG DATA DATA2 DATA3 U2SAV ZZZ BZZ FLZZZ NUM1
C00157 00048 SGT5 SGT5A SGT5B SGT5C SGT3 SGT3A SGTOT TABFIX TABFI2 TABFI3 TABFIZ TBCHAN TBFILE TABLST TAB2 TAB3 TAB3A TAB3B TAB4 TAB4B TAB5 TAB8 TAB7 TAB6 TAB20 TAB20A TAB20B TAB21 TAB22 TAB23 TAB24 TAB25 TAB26 TAB27 TAB31 TAB32 TAB33 TAB34
C00169 00049 EVA LEV1 CFC CFA1 CFA3 PHASFI DSKERR
C00172 00050 SIGT0 SIGN0 SIG0 LABEL EVAL11 SIGT11 EVAL12 SIGT12 EVAL13 SIGT13 EVAL14 SIGT14 EVAL15 SIGT15 EVAL16 SIGT16 EVAL21 SIGT21 EVAL22 SIGT22 EVALF SIGTF TTABLE
C00175 00051 FINMOV FINMO2 FOUNDM BWINMV FOUNDN CHOICE FINMO3
C00181 00052 EXBITS DSKBKM BKMIN INPA BKMOVE BOOKA BOOKP BOOKK BOOKM BOOKI FILEIN GETFIL SAV0 GETFIA MESS
C00184 ENDMK
C⊗;
TITLE CKP CHECKERS 6/8/77
SUBTTL PLAY -- A. SAMUEL
;****************************************************
; PLAY CONTAINS THOSE ESSENTIAL SET-UP PROCEDURES *
; TO INITIATE PLAY. IT RESTORES ALL NECESSARY *
; REGISTERS, CLEARS WORKING SPACES TO THE EXTENT *
; NECESSARY AND IT ACCEPTS AN INPUT BOARD OR STARTS *
; A NEW GAME. IT CALLS ON GET TO GET PLAY STARTED. *
;****************************************************
; REGISTER ASSIGNMENTS
;ASSIGNMENT USAGE
Z=0
X1=1 ; INDEX MAIN
U1=2
X2=3 ; INDEX PATH
U2=4
X3=5 ; INDEX PLAUS
U3=6
X4=7 ; INDEX TWIG
U4=10
X5=11 ; PASS COLOR
U5=12
Q=13
A=14 ; ACTIVE
P=15 ; PASSIVE
K=16 ; KINGS
PDP=17 ; PUSHJ
I=Q
OPDEF TTYUUO [51B8]
INTERN EVTIM0,EVTIMT
INTERN ACCEPT,BDOUT,BOUT,CDIFF,CRFST,CRUNT,CSFLAG,CTELLC,CTOTAL
INTERN D,DEBUG,DIFF,FSTCR,GO,LEGM,LPTREE,MOVIN,MESS,FINDM,IA
INTERN PB,PC,PLAYBS,PW,RUNT,SETB,SETW,SETPAR,IP,IK,MOVOUT,MOVES
INTERN TELLC,TELPAR,TOTAL,TREE,TRESET,W,CORR,FIND,RECIN,SUM
INTERN EXIT1,MOP,MOVX,LABEL
INTERN INPSIZ,INPA,INPP,INPK,BOOKA,BOOKP,BOOKK,BOOKI,BOOKM
INTERN TREFIX,DSTREE,BK,TABLST,TABFIX
EXTERN LPTBUF
EXTERN FINDFI,FINDX1,X4NORM,X4ALL,X4TAB,CRIP,REVERA,REVERP,REVERK,TLIST
EXTERN CFLAG,NOTICE,DATE,WHERE,PHASE
EXTERN OUTIN,TA,TP,TK,PLY,RJ2,RJ4,USEBOK,PCCNT
EXTERN ACSAV,BAD,BEGIN,BEST,BEST2,BESTM,BESTO
EXTERN BPBP,COLOR,COUNT,COUNTS,DECIN,DOTFLG,DWFLAG
EXTERN EEB,EEB2,EOL,ERR,FLAG,GOOD
EXTERN INTERP,LASCAR,LASTP,LEGAL,LOSE
EXTERN LPFLAG,LPTFIX,LRPDL,MJ,MJBP,MJW,MTYPE,NOYES,NUMOUT
EXTERN OA,OCT2,OCTIN,OCTOUT,OJ,OK,OLB,OLF,OP,ORDER,ORDER2,ORF
EXTERN PLA,PLAS,PLFLG,PLK,PLKS,PLLB,PLLBS,ORB
EXTERN PLLF,PLLFS,PLMJS,PLP,PLPS,PLRB,PLRBS,PLRF,PLRFS,PLSKIP,PLSKS
EXTERN PRINT,PRUNE,PUP,RJOUT,S,SAVE,SCAN,SCORE,SFLAG,SI
EXTERN SIDE,STOP,TAPER,TERPRI,TISKIP,TRUNK,TYI,TYO,U2S,U2SS,UPDATE
EXTERN WIDTH,WIN,WORSTM,X1S,X2S,X2SS,X4S,XTWIG,ZS,ZZ,PHASEV,KSTART
;THESE DEFINITIONS NEEDED TO DEFINE UNUSED GLOBALS
EXTERN NOTICE
INTERN ZL,LZERO,BEGINL,BEGL3,SYM,LCONTZ,DIVIDE,LCONTS
INTERN TRNKNO,LBYT,LFLAG,SIG,HEADFL
INTERN LZER2,LZER3
INTERN PAR,XPAR
ZL:
LZERO:
BEGINL:
BEGL3:
SYM:
LCONTZ:
LCONTS:
LZER2:
LZER3:
PAR:XPAR:
DIVIDE: JRST NOTICE
TRNKNO:
LBYT:
LFLAG: Z
PSHIFT=3 ;ALLOWANCE FOR PLY IN X2
PSIZE=10 ;PLY VALUE IN MAIN
PMASK=7 ;MASK FOR PLY IN X2
HEADFL: Z
;PLAY PLAY1 PLAY2
PLAY:
SETZM BKTELL#
SKIPN TREE
JRST PLAY1
SETOM PRFLG
SKIPE TREOUT
PUSHJ PDP,TREFIX ;To open TREE file
PUSHJ PDP,DATE
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ / /]
MOVEM U1,DOTFLG
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /MOVE /]
PUSHJ PDP,PRINT
MOVE U1,SI
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /, PDP-/]
PUSHJ PDP,PRINT
PUSHJ PDP,MTYPE
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / PLAYING /]
PUSHJ PDP,PRINT
MOVEI U1,[ASCIZ /BLACK./]
SKIPE SIDE
MOVEI U1,[ASCIZ /WHITE./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TELPAR
PUSHJ PDP,BOUT
PLAY1: MOVEI U1,MA
SETZM (U1)
CAIGE U1,BZ+17
AOJA U1,PLAY1+1
MOVE Z,PLAUSD
MOVEM Z,PLDPT
SETZB X1,FLIT
SETZM STEM
SETZM TIPPLY ;X2 OK INITIALLY
SETZB X2,BPTR-1
SETZM U2MAX
MOVE U1,DEPTH
LSH U1,3
MOVEM U1,DEPTHM
MOVEM U1,DEPTHZ
SETZB X3,MA
SETZB X4,COUNT
MOVE U1,TIMEX
LSH U1,11
MOVEM U1,COUNTM
SETZM COUNTZ ;USED AS TEST FIRST TIME
SETZB U1,U2
SETZB U3,U4
MOVEI U5,17
SETZM PLA(U5) ;CLEAR PLAUS SPACE
SOJGE U5,.-1
MOVE Z,WIN
MOVEM Z,FLZZ
MOVE U5,[XWD FLZZ, FLZZ+1]
BLT U5,FLZZ+17 ;WINS TO CAUSE INITIAL FLITTING
MOVEM Z,BEST
MOVEM Z,BEST2
MOVE Z,LOSE ;RESTORE ALL SCORE VALUES
MOVEM Z,SCORE
MOVEI U2,PSIZE-1
MOVEM Z,S(U2)
MOVEM Z,PRUZ(U2)
SOJGE U2,.-2
MOVEI U1,1
MOVEI U2,PSIZE*14-PSIZE
SETOM PLY-2(U2)
SETZM PLY-1(U2)
MOVEM U1,PSKIP-1(U2)
MOVEM U1,PLY(U2)
MOVEM U1,PSKIP(U2)
SUBI U2,PSIZE
JUMPGE U2,.-6
MOVEM A,IA ;SAVE IN INITIAL BOARD SPACE
MOVEM A,PLA(X3) ;ALSO GET READY FOR LEGAL
MOVEM P,IP
MOVEM P,PLP(X3)
MOVEM K,IK
MOVEM K,PLK(X3)
MOVEM K,KSTART
PUSHJ PDP,PHASEV
PUSHJ PDP,PHASFI
MOVE U1,SIDE
MOVEM U1,COLOR
SETZ X3,
MOVE U2,BTERMS
SKIPE COLOR
MOVE U2,WTERMS
MOVEM U2,CFLAG
PUSHJ PDP,LEGAL ;FIND LEGAL MOVES
JRST LOST ;GAME IS LOST
AOJA X3,.+10
ADDI X3,1
MOVE Z,EEB
MOVEM Z,EEB-1
MOVEM Z,EEB-2
MOVE Z,EEB2
MOVEM Z,EEB2-1
MOVEM Z,EEB2-2
SKIPE USEBOK
PUSHJ PDP,X4NORM
SETZM GETF1 ;RESET GET FLAG 1 FOR OVER 8
SETZM GETF2 ;RESET GET FLAG 2
SETZB X4,ORDER
SETZM ORDER2
PUSHJ PDP,GET ;GET FIRST 12 TRUNKS
SKIPE BKTELL
POPJ PDP, ;Return for BK usage
SOJE X4,EXIT1+1 ;SINGLE MOVE ESCAPE
JUMPL X4,BEGIN
MOVE A,IA
MOVE P,IP
MOVE K,IK
SKIPE USEBOK
PUSHJ PDP,FINMOV ;SEE IF BOOK MOVE IS SAVED
SKIPN TREE
JRST PLAY2
MOVEI U1,[ASCIZ /STARTING WITH TRUNK /]
PUSHJ PDP,PRINT
MOVE U1,X4
ADDI U1,1
CAILE U1,10
MOVEI U1,10
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / FOR PDP-/]
PUSHJ PDP,PRINT
PUSHJ PDP,MTYPE
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /: MIN SCORE MAX/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PLAY2: MOVEI U2,PSIZE*14-PSIZE
MOVEM X4,BRUSH(U2)
MOVEM X4,BRUSH+1(U2)
SUBI U2,PSIZE
JUMPGE U2,.-3
SETZB X1,X2
SETZ X3,
MOVE U2,ORDER
LSHC X2,4 ;GET FIRST TRUNK
SUBI X2,1
MOVEM U2,ORDER ;RESTORE
MOVE Z,GTCNT(X2)
MOVEM Z,GTCNT0
LSH X2,3
MOVEM X2,TRUNK ;NEEDED FLPERX
AOJA X2,PL1
;GET GET2 GET1Z GET1A GET2A GET3
;*****************************************************
; GET IS A SUBROUTINE WHICH GETS PLAY STARTED *
; ON DIFFERENT TRUNKS SO THAT PLAUS CAN TAKE OVER. *
; IT IS CALLED INITIALLY BY PLAY, TO ESTABLISH 8 *
; TRUNKS AND AGAIN LATER BY SORT TO GET ADDITIONAL *
; TRUNKS IF THEY EXIST. *
;*****************************************************
GET: MOVEI X2,-2
PUSHJ PDP,PUP
POPJ PDP, ;ALL TRUNKS FOUND, LEAVE GET
MOVEM A,PLA(X3)
MOVEM P,PLP(X3)
MOVEM K,PLK(X3)
MOVEM A,MOA(X4) ;SAVE IN MOVE SPACE
MOVEM P,MOP(X4)
MOVEM K,MOK(X4)
PUSHJ PDP,FINDM
SKIPE TREE
PUSHJ PDP,GTREE
SETZM MOJ(X4)
PUSHJ PDP,LEGAL ;FIND MOVES
JRST WON ;WINNING FIRST MOVE FOUND
PUSHJ PDP,GET1A ;JUMP MOVE
MOVE Z,PLRF(X3) ;SAVE MOVE VECTORS
MOVEM Z,MORF(X4)
MOVE Z,PLLF(X3)
MOVEM Z,MOLF(X4)
MOVE Z,PLLB(X3)
MOVEM Z,MOLB(X4)
MOVE Z,PLRB(X3)
MOVEM Z,MORB(X4)
ADDI X3,1 ;INDEX
MOVE X1,X4 ;GET TRUNK INDEX
LSH X1,PSHIFT+3 ;TO INDEX MAIN
MOVE U4,X4
LSH U4,3 ;TO INDEX OVERFLOW
MOVEM U4,TRUNK
SETZM OVA(U4) ;TRASH GUARD
SETZM GETCNT# ;TO COUNT BOARDS
GET2: PUSHJ PDP,PUP ;NOW CONTINUE
JRST GET4 ;NO MORE BRANCHES
MOVE Z,GETCNT
CAIL Z,10 ;WHERE TO
JRST GET3 ;TO OVERFLOW
MOVE Z,MOA(X4)
MOVEM Z,MMOVA(X1)
MOVEM P,MMOVP(X1)
MOVEM A,MA(X1)
MOVEM P,MP(X1)
MOVEM K,MK(X1)
PUSHJ PDP,LEGAL
JRST GET1Z ;NO MOVES, SO DISCARD TRUNK
PUSHJ PDP,GET2A
MOVE Z,PLRF(X3)
MOVEM Z,MRF(X1)
MOVE Z,PLLF(X3)
MOVEM Z,MLF(X1)
MOVE Z,PLLB(X3)
MOVEM Z,MLB(X1)
MOVE Z,PLRB(X3)
MOVEM Z,MRB(X1)
MOVEI Z,1
MOVEM Z,MSKIP(X1)
MOVE Z,EEB(X3) ;START ME OFF RIGHT
MOVEM Z,ME(X1)
MOVE Z,EEB2(X3)
MOVEM Z,ME2(X1)
ADDI X1,1
AOS GETCNT
JRST GET2
GET1Z: SKIPN TREE
JRST GET4B
MOVEI U1,[ASCIZ /IGNORE THIS TRUNK/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST GET4B
GET1A: SETOM MOJ(X4)
GET2A: MOVE Z,EEB-2(X3)
MOVEM Z,EEB(X3)
MOVE Z,EEB2-2(X3)
MOVEM Z,EEB2(X3)
POPJ PDP,
GET3: MOVE Z,GETCNT
CAIG Z,10
MOVE X1,TRUNK
MOVE Z,MOA(X4)
MOVEM Z,OVMOVA(X1)
MOVEM P,OVMOVP(X1)
MOVEM A,OVA(X1)
MOVEM P,OVP(X1)
MOVEM K,OVK(X1)
PUSHJ PDP,LEGAL
SOJA X3,GET ;NO MOVES, DISCARD TRUNK
PUSHJ PDP,GET2A
MOVE Z,PLRF(X3)
MOVEM Z,OVRF(X1)
MOVE Z,PLLF(X3)
MOVEM Z,OVLF(X1)
MOVE Z,PLLB(X3)
MOVEM Z,OVLB(X1)
MOVE Z,PLRB(X3)
MOVEM Z,OVRB(X1)
MOVEI Z,1
MOVEM Z,OVSKIP(X1)
MOVE Z,EEB(X3)
MOVEM Z,OVE(X1)
MOVE Z,EEB2(X3)
MOVEM Z,OVE2(X1)
ADDI X1,1
SETZM OVA(X1)
AOS GETCNT
JRST GET2
;GET4 GET4B GET4A GET5 GETF1 GETF2 GETF3
GET4: MOVE Z,GETCNT
CAIGE Z,10 ;HOW MANY BRANCHES
SETZM MA(X1) ;SET STOP IN MAIN IF NEEDED
SUBI Z,1
MOVEM Z,GTCNT(X4) ;USED IN SET AFTER MOVEM GTCNT0
MOVE U3,X4
ADDI X4,1
CAIG X4,10 ;PUT WHERE
JRST .+5 ;INTO ORDER
MOVE U4,ORDER2
LSHC X4,-4
MOVEM U4,ORDER2
JRST .+4
MOVE U4,ORDER ;NOW FIX ORDER
LSHC X4,-4
MOVEM U4,ORDER ;SAVE ORDER
MOVE X4,U3 ;RESTORE X4
LSH U3,PSHIFT ;GET INTO X2 FORM
ADDI U3,1 ;SET PLY VALUE
MOVEM U3,FLX2(X4) ;SET UP FOR FLITTING
GET4B: ADDI X4,1
SKIPE GETF2 ;IS THIS A FIRST PASS
JRST GET4A ;YES
CAIGE X4,14 ;CHANGED FOR 12 TRUNKS
SOJA X3,GET ;SAFE TO GO ON
GET4A: SETZM GETF1
SKIPE PLRF-2(X3)
JRST GET5
SKIPE PLLF-2(X3)
JRST GET5
SKIPE PLLB-2(X3)
JRST GET5
SKIPN PLRB-2(X3)
POPJ PDP, ;NO MORE MOVES
GET5: SETOM GETF1 ;OVER 12 SO SET FLAG AND SAVE
MOVE PLA-2(X3)
MOVEM PLAS
MOVE PLP-2(X3)
MOVEM PLPS
MOVE PLK-2(X3)
MOVEM PLKS
MOVE PLSKIP-2(X3)
MOVEM PLSKS
MOVE PLRF-2(X3)
MOVEM PLRFS ;SAVE FOR FUTURE USE
MOVE PLLF-2(X3)
MOVEM PLLFS
MOVE PLLB-2(X3)
MOVEM PLLBS
MOVE PLRB-2(X3)
MOVEM PLRBS
MOVE MJW-2(X3)
MOVEM PLMJS
POPJ PDP, ;MUST RETURN
GETF1: Z ;MORE THAN 8 TRUNK FLAG
GETF2: Z ;SECOND TIME IN FLAG
GETF3: Z ;NEW TRUNK FLAG
;SET PRUCT
;********************************************************
; SET IS USED TO SET-UP CONDITIONS FOR PLAUS *
; AFTER A BACK UP HAS OCCURRED. IT ALSO CONTAINS THE *
; NECESSARY PROVISIONS FOR STILL FURTHER BACKING UP *
; WHEN EMPTY BPTR WORDS ARE ENCOUNTERED, AND FOR *
; SWITCHING TRUNKS WHEN THEY ARE EXHAUSTED. *
;********************************************************
SET: SETZM MJW-1 ;SAFETY PRECAUTION
SETZM TIPPLY ;RESTORE FOR U2 LESS THAN 10
MOVE U4,TRUNK
SETZB X1,OVA(U4)
SETZM BPTR-1(X2) ;CLEAN UP TRASH
SUBI X2,1
SKIPN U1,BPTR-1(X2) ;NEW BRANCH NUMBER
JRST SET10 ;NO MORE BOARDS AT THIS LEVEL
SETOM STEM
TRNN X2,PMASK-1 ;FULL DEPTH ON FIRST REPLY
SETZM STEM
MOVE X3,PLAYD
MOVEM X3,PLDPT
MOVE X3,X2
LSH X3,3
LSHC X1,4
JUMPN X1,.+4 ;DIRTY BPTR?
MOVEI U1,[ASCIZ /DIRTY BPTR./]
PUSHJ PDP,PRINT
JRST SET10
SUBI X1,1
IOR X1,X3
MOVEM U1,BPTR-1(X2) ;REPLACE REMAINING
MOVE U2,X2
ANDI U2,PMASK
CAILE U2,2
JRST .+4 ;CONSIDER PRUNING
SKIPLE GTCNT0 ;TEST FOR JUMP REPLY
CAIG U2,1
JRST SET0B ;DO NOT PRUNE
MOVE Z,S-1(U2)
CAMG Z,PRUZ-1(U2)
JRST SET0A
MOVEM Z,PRUZ-1(U2)
MOVE Z,PRUCT-1(U2)
MOVEM Z,PRUC-1(U2)
JRST SET0B ;OK
PRUCT: 3 ;PRUNING COUNT TABLE
2 ;N+1 BRANCHES TRIED
1
1
1
1
1
1
1
;SET0A SET0B SET1A SET1B SET1 SET2 SET2A SE2 SE3 SE4 SF1 SF2 SF3 SF4 SF5 SET2C SET3 SET2B SET4 SET5 SET6
SET0A: SOSGE PRUC-1(U2) ;IS IT TIME TO PRUNE
JRST SET10 ;YES
SET0B: MOVE U1,MSKIP-10(X1) ;THIS ESTABLISHES RELATION BETWEEN PSKIP AND MSKIP
MOVEM U1,PSKIP-1(X2)
ADD U1,PLY-1(X2)
MOVEM U1,PLY(X2) ;SET NEW BASE PLY
XOR U1,SIDE ;CLEAN UP COLOR
ANDI U1,1
MOVE Z,ME-10(X1)
MOVEM Z,EEB-1
MOVEM Z,EEB-2 ;PREPARATION FOR BACKUP IN PLAUS
MOVE Z,ME2-10(X1)
MOVEM Z,EEB2-1
MOVEM Z,EEB2-2 ;DITTO
TRC U1,1
MOVEM U1,COLOR ;SET NEW BASE COLOR
SKIPE TREE
PUSHJ PDP,STREE
SETZ X4, ;NEEDED LATER TO COUNT BOARDS
MOVE U2,X2
ANDI U2,PMASK
MOVE U1,PSKIP-1(X2)
TRNE U1,1
JRST SET1A
MOVE Z,S-1(U2) ;OK FOR EVEN SKIP
JRST SET1B
;ODD PSKIP CASE
SET1A: MOVE U3,X2
MOVE U1,PSKIP-2(U3)
TRNN U1,1
SOJA U3,.-2 ;ODD ONE EXISTS
ANDI U3,PMASK
MOVE Z,S-2(U3)
SET1B: MOVEM Z,S(U2)
MOVE U1,X2 ;NEED SECOND X1
LSH U1,3 ;SIMULATE X1
MOVEM U1,X1SET#
SKIPA
SET1: EXCH X1,X1SET
SETZ X3,
PUSHJ PDP,MUP
JRST SET6 ;NO MORE MOVES
EXCH X1,X1SET
MOVEM P,MOVPP
SET2: MOVEM A,PLA(X3)
MOVEM P,PLP(X3)
MOVEM K,PLK(X3)
PUSHJ PDP,LEGAL
JRST SET7 ;NO LEGAL MOVES
AOJA X3,SET2B ;JUMP RETURN
ADDI X3,1
SET2A: SETZM SETC# ;TO COUNT MOVES
SKIPE U1,PLRF-1(X3)
JRST SF1 ;ONE FOUND
SE2: SKIPE U1,PLLF-1(X3)
JRST SF2
SE3: SKIPE U1,PLLB-1(X3)
JRST SF3
SE4: SKIPE U1,PLRB-1(X3)
JRST SF4
JRST SF5 ;MUST BE ONE
SF1: AOS SETC
SUBI U1,1
AND U1,PLRF-1(X3)
JUMPN U1,SET2C
JRST SE2
SF2: SKIPE SETC
JRST SET2C
AOS SETC
SUBI U1,1
AND U1,PLLF-1(X3)
JUMPN U1,SET2C
JRST SE3
SF3: SKIPE SETC
JRST SET2C
AOS SETC
SUBI U1,1
AND U1,PLLB-1(X3)
JUMPN U1,SET2C
JRST SE4
SF4: SKIPE SETC
JRST SET2C
AOS SETC
SUBI U1,1
AND U1,PLRB-1(X3)
JUMPN U1,SET2C
SF5: CAIL X3,14 ;SAFER TO SAVE ANYWAY
JRST SET2C ;YES
PUSHJ PDP,PUP ;UPDATE
SOJA X3,SET7 ;MUST BE ERROR
JRST SET2 ;GO AROUND AGAIN
SET2C: CAIL X4,10
JRST SET4 ;MUST SAVE IN OVERFLOW
MOVEM A,MA(X1)
MOVEM P,MP(X1)
MOVEM K,MK(X1)
MOVE Z,PLRF-1(X3) ;STORE ITEMS SUBJECT TO CHANGE
MOVEM Z,MRF(X1)
MOVE Z,PLLF-1(X3)
MOVEM Z,MLF(X1)
MOVE Z,PLLB-1(X3)
MOVEM Z,MLB(X1)
MOVE Z,PLRB-1(X3)
MOVEM Z,MRB(X1)
SET3: MOVE Z,EEB-1(X3)
MOVEM Z,ME(X1)
MOVE Z,EEB2-1(X3)
MOVEM Z,ME2(X1)
MOVEM X3,MSKIP(X1)
SKIPE TREE
PUSHJ PDP,SETT3
ADDI X1,1
AOJA X4,SET1
SET2B: MOVE Z,EEB-3(X3)
MOVEM Z,EEB-1(X3)
MOVE Z,EEB2-3(X3)
MOVEM Z,EEB2-1(X3)
JRST SET2A
SET4: CAIG X4,10
MOVE X1,TRUNK
MOVEM A,OVA(X1)
MOVEM P,OVP(X1)
MOVEM K,OVK(X1)
MOVE Z,PLRF-1(X3) ;STORE ITEMS WHICH MAY CHANGE
MOVEM Z,OVRF(X1)
MOVE Z,PLLF-1(X3)
MOVEM Z,OVLF(X1)
MOVE Z,PLLB-1(X3)
MOVEM Z,OVLB(X1)
MOVE Z,PLRB-1(X3)
MOVEM Z,OVRB(X1)
SET5: MOVE Z,EEB-1(X3)
MOVEM Z,OVE(X1)
MOVE Z,EEB2-1(X3)
MOVEM Z,OVE2(X1)
MOVEM X3,OVSKIP(X1)
SKIPE TREE
PUSHJ PDP,SETT5
SETZM OVA+1(X1)
ADDI X1,1
AOJA X4,SET1
SET6: EXCH X1,X1SET
CAIGE X4,10
SETZM MA(X1) ;SET GUARD IN MAIN IF NEEDED
JUMPLE X4,SET8 ;NO MUP CASE
MOVE U1,X2
ANDI U1,PMASK
CAIL U1,PSIZE-1 ;CAN WE GO ON
AOJA X2,TIP ;NO
MOVE U3,BRUSH-1(X2)
ADD U3,X4
MOVEM U3,BRUSH(X2)
CAMG U1,WIDTH
AOJA X2,PL1 ;GO ON
ADD U3,TAPER
MOVEM U3,BRUSH-1(X2)
CAMLE U3,DEPTHM
AOJA X2,TIP ;TIME TO STOP
AOJA X2,PL1 ;INDEX TO PL1
;SET7 SET7A SET8 SET8A TRESP TRESS SET9 SET9A SET10 SET11 SET12
;NO LEGAL MOVES AFTER MUP
SET7: TRNE X3,1
JRST SET1
MOVE U1,PSKIP-1(X2)
TRNE U1,1
JRST SET8A ;ODD NO LEGAL LIKE EVEN NO MUP
SET7A: MOVE U2,X2
ANDI U2,PMASK
MOVE Z,WIN
SUB Z,PLY(X2)
SUB Z,X3
SETZ X3,
SKIPE TREE
PUSHJ PDP,TRESS ;YES TRESS
CAMG Z,S-1(U2)
MOVE Z,S-1(U2)
JRST SET11
SET8: MOVE U1,PSKIP-1(X2)
TRNE U1,1
JRST SET7A ;ODD NO MUP LIKE EVEN NO LEGAL
SET8A: MOVE U2,X2
ANDI U2,PMASK
MOVE Z,LOSE
ADD Z,PLY(X2)
ADD Z,X3
SETZ X3,
SKIPE TREE
PUSHJ PDP,TRESS
CAMLE Z,S-1(U2)
MOVEM Z,S-1(U2)
AOJA X2,SET ;ANOTHER AT SAME LEVEL
TRESP: SETZM X3
MOVE U1,PSKIP-1(X2)
TRNN U1,1
MOVNS Z
MOVE U2,X2
ANDI U2,PMASK
SKIPN U2
ADDI U2,PSIZE
TRESS: MOVE U5,S-1(U2) ;PREPARE A-B SCORES
MOVE U3,X2
MOVE U1,PSKIP-2(U3)
TRNN U1,1
SOJA U3,.-2
ANDI U3,PMASK
SKIPN U3
ADDI U3,PSIZE
MOVE U3,S-2(U3)
MOVE U1,PSKIP-1(X2)
TRNE U1,1
EXCH U5,U3
MOVEM U3,ZZ-2(X3)
MOVEM U5,ZZ-1(X3)
JRST TREES
;NO MORE BOARDS BACK-UP
SET9: MOVEM Z,ZS
SKIPE TREE
PUSHJ PDP,TRESP
MOVE Z,ZS
MOVEM Z,S-1(U2)
JRST SET10
SET9A: SKIPE TREE
PUSHJ PDP,TRESP
SET10: MOVE U2,X2
ANDI U2,PMASK ;GET PLY PORTION ONLY
SKIPN U2
ADDI U2,PSIZE ;CORRECTION IF PLY OVER
MOVE Z,S-1(U2)
SET11: MOVE U1,PSKIP-2(X2) ;BACKING UP, REMEMBER
TRNN U1,1
MOVNS Z ;WOOPS, WRONG SIGN!
CAIGE U2,2
JRST SET12 ;WILL GO ON TO SET21
MOVE U3,X2
SUBI U3,1 ;BACK 1
MOVE U1,PSKIP-2(U3) ;TEST EARLIER SKIP
TRNN U1,1 ;IS IT ODD
SOJA U3,.-2 ;ONE ALWAYS EXISTS
MOVE U1,U3
ANDI U1,PMASK
MOVM U5,Z
CAILE U5,400000 ;MARGIN EXEMPTION LEVEL
JRST .+7
LSH U5,-4 ;DIVIDE BY 16
MOVNS U5
ADD U5,Z
CAMLE U5,S-2(U1)
JRST SET12
JRST .+3
CAMLE Z,S-2(U1) ;CAN WE ALPHA PRUNE
JRST SET12 ;NO SO BETA TEST
MOVE X2,U3 ;YES
SOJG U1,SET ;DEEP ENOUGHT TO SET
JRST SET21A ;NEW TRUNK NEEDED
SET12: MOVNS Z
SOJLE U2,SET21 ;COMPARE WITH SCORE
CAMLE Z,S-1(U2)
MOVEM Z,S-1(U2)
JRST SET
;SET21 SET21A SET21D SET21B SET21C
SET21: TRNN X2,PMASK
SUBI X2,1
LSH X2,-PSHIFT
CAMG Z,SCORE
JRST SET21D
MOVEM Z,SCORE
MOVEM X2,MOVX ;SAVE AS MOVE RECORD
JRST SET21D
SET21A: TRNN X2,PMASK
SUBI X1,1
LSH X2,-PSHIFT
SET21D: MOVE U1,COUNT
AOS U2,COUNTX
MOVEM X2,MOVXZ(U2)
SETOM MOVXZ+1(U2)
MOVE U3,DEPTHM
MOVEM U3,DEPTHZ(U2)
SETZM DEPTHZ+1(U2)
MOVEM U1,COUNTZ(U2) ;SAVE TO PRINT
SETZM COUNTZ+1(U2) ;PRINT STOP
SUB U1,COUNTZ-1(U2) ;INCREMENT COUNT
MOVE U3,COUNTM
SUB U3,U1
MOVEM U3,COUNTM
MOVEI Z,4 ;CORRECTION
CAMG U1,COUNTM
JRST .+3
MOVNS Z
JRST .+4
IMULI U1,5
LSH U1,-2
CAMG U1,COUNTM
ADDM Z,DEPTHM
SKIPN U1,ORDER
JRST EXIT
SETZ X1,
LSHC X1,4
MOVEM U1,ORDER ;SAVE REST OF POINTER
MOVE Z,FLZZ-1(X1)
CAMLE Z,BAD ;IF Z < BAD THEN NO USE TO GO ON
JRST .+7
SKIPN TREE
JRST .+4
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /REMAINING TRUNKS TERMINATED./]
PUSHJ PDP,PRINT
JRST EXIT
SKIPE TREE
PUSHJ PDP,TRTRE
MOVEI U1,7
MOVE Z,LOSE
MOVEM Z,PRUZ(U1)
MOVE U2,PRUCT(U1)
MOVEM U2,PRUC(U1)
SOJGE U1,.-3
MOVE U1,STEMD
MOVEM U1,PLDPT
SETZM STEM
MOVE X2,FLX2-1(X1) ;GET NEW STARTING PLACE
SUBI X1,1
MOVE Z,GTCNT(X1)
MOVEM Z,GTCNT0 ;CURRENT VALUE
LSH X1,3
MOVEM X1,TRUNK ;SAVE FOR OVERX USAGE
MOVE Z,SCORE ;NOW FIX SCORE
MOVE Q,LOSE
MOVE U2,X2
MOVE U3,X2
ANDI U3,PMASK
SKIPN U3
ADDI U3,PSIZE
MOVE U1,PLY-1(U2)
TRNE U1,1
JRST .+4
MOVEM Z,S-1(U3)
SUBI U2,1
SOJG U3,.-5
MOVEM Q,S-1(U3)
SUBI U2,1
SOJG U3,.-10
SKIPN U2,ORDER2
JRST SET21C
SKIPN U1,ORDER
JRST SET21B
SETZ X1,
LSHC X1,4
MOVE Z,FLZZ-1(X1)
CAMG Z,BEST2
JRST .+3
MOVEM Z,BEST
JRST SET21C
EXCH Z,BEST2
MOVEM Z,BEST
SET21B: EXCH U2,ORDER
MOVEM U2,ORDER2
SET21C: TRNN X2,PMASK
JRST TIP
MOVE U1,BRUSH-1(X2)
CAML U1,DEPTHM
JRST TIP
JRST PL1
;EXIT EXIT2 EXIT1 LOST WON
; EXIT REPORTS FINAL MOVE.
EXIT: SKIPN TREE
JRST EXIT2
PUSHJ PDP,TERPRI
SETO U2,
MOVE U1,COUNTS(U2)
SETZM COUNTS(U2)
JUMPE U1,.+4
SETZ X2,
MOVM Z,U1
PUSHJ PDP,RJ4
CAIGE U2,24
AOJA U2,.-7
PUSHJ PDP,TERPRI
EXIT2: MOVE Z,SCORE
CAML Z,GOOD
JRST WON
CAMG Z,BAD
JRST LOST
EXIT1: MOVE X4,MOVX ;GET BEST TRUNK NUMBER
MOVE Z,MOA(X4)
MOVEM Z,OA
MOVE Z,MOP(X4)
MOVEM Z,OP
MOVE Z,MOK(X4)
MOVEM Z,OK
MOVE Z,MORF(X4)
MOVEM Z,ORF
MOVE Z,MOLF(X4)
MOVEM Z,OLF
MOVE Z,MOLB(X4)
MOVEM Z,OLB
MOVE Z,MORB(X4)
MOVEM Z,ORB
MOVE Z,MOJ(X4)
MOVEM Z,OJ
SKIPE TREE
PUSHJ PDP,TERPRI
MOVE U1,MOVES(X4)
POPJ PDP,
LOST: PUSHJ PDP,PDP16
MOVEI U1,[ASCIZ / RESIGNS./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
SETOM LPFLAG ;JUST TO BE SURE
RELEAS 2, ;RELEASE LPT (IT MAY HAVE BEEN INITED)
JRST BEGIN
WON: SKIPE WONFLG#
JRST EXIT1
SETOM WONFLG
PUSHJ PDP,TERPRI
PUSHJ PDP,PDP16
MOVEI U1,[ASCIZ / EXPECTS TO WIN IN /]
PUSHJ PDP,PRINT
MOVE Z,WIN
SUB Z,SCORE
ADDI Z,1 ;FIX THIS UP TO COUNT RIGHT
MOVE U1,Z
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / MOVES./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST EXIT1
;FINDM FIND FIND1 FIND2 FIND3 FIND4 FIND6 FIND7 FIND8 FIND9
;************************************************************
; FINDM IS A SUBROUTINE TO SAVE A MOVE IN A FORM SUITABLE *
; FOR TRANSMITTAL TO MOVOUT. *
;************************************************************
FINDM: MOVE U5,P
XOR U5,PLA-1(X3)
MOVE Z,U5
AND Z,P
XOR U5,Z
PUSHJ PDP,FIND
MOVE U5,Z
MOVE Z,U1
PUSHJ PDP,FIND
HRL U1,Z
MOVEM U1,MOVES(X4)
POPJ PDP,
;****************************************************
; FIND IS A SUBROUTINE WHICH LOCATES A BIT IN *
; REGISTER U5 AND RETURNS A BINARY COUNT OF ITS *
; CHECKER POSITION IN U1. REGISTER X5 IS USED AND IS*
; NOT RESET. *
;****************************************************
FIND: SETZB X5,U1
ADDI U1,1
LSHC X5,22
JUMPN X5,FIND6
ADDI U1,20
LSHC X5,11
JUMPN X5,FIND7
FIND1: ADDI U1,10
LSHC X5,5
JUMPN X5,FIND8
FIND2: ADDI U1,4
LSHC X5,2
JUMPN X5,FIND9
FIND3: ADDI U1,2
LSHC X5,1
SKIPN X5
FIND4: ADDI U1,1
POPJ PDP,
FIND6: LSHC X5,-11
JUMPE X5,FIND1
FIND7: LSHC X5,-4
JUMPE X5,FIND2
FIND8: LSHC X5,-2
JUMPE X5,FIND3
FIND9: LSHC X5,-1
JUMPE X5,FIND4
POPJ PDP,
;MA MP MK MRF MLF MLB MRB MSKIP ME ME2 MMOVA MMOVP MOVA MOVP MVAA MVPP MOVAA MOVPP MMSKIP GTCNT0 GTCNT PRUC COUNTZ DEPTHZ MOVXZ COUNTX BPTR BPTRO PSKIP BRUSH MOVX TRF TLF TLB TRB TSKIP TE TE2
;***********************************************************
;MAIN IS INDEXED BY TRUNK PLY AND BRANCH
MA: BLOCK PSIZE*140 ;ACTIVE PIECES
MP: BLOCK PSIZE*140 ;PASSIVE PIECES
MK: BLOCK PSIZE*140 ;ALL KINGS
MRF: BLOCK PSIZE*140 ;RIGHT FOREWARD MOVES
MLF: BLOCK PSIZE*140 ;LEFT FOREWARD MOVES
MLB: BLOCK PSIZE*140 ;LEFT BACKWARD MOVES
MRB: BLOCK PSIZE*140 ;RIGHT BACKWARD MOVES
MSKIP: BLOCK PSIZE*140 ;SKIPPED MOVES
ME: BLOCK PSIZE*140 ;HALF EVALUATION
ME2: BLOCK PSIZE*140
MMOVA: BLOCK PSIZE*140
MMOVP: BLOCK PSIZE*140
MOVA: BLOCK 400
MOVP: BLOCK 400
MVAA: BLOCK 20
MVPP: BLOCK 20
MOVAA: Z
MOVPP: Z
MMSKIP: BLOCK 20
GTCNT0: Z ;CURRENT REPLY COUNT (FROM 0)
GTCNT: BLOCK 20 ;REPLY COUNTS
Z
PRUC: BLOCK 20 ;PRUNE COUNT
0 ;GUARD
COUNTZ: BLOCK 21 ;COUNTS FOR EACH TRUNK
DEPTHZ: BLOCK 20 ;DEPTHS FOR EACH TRUNK
MOVXZ: BLOCK 20 ;TRUNK ORDER AS USED
COUNTX: 0 ;INDEX TRUNKS FOR COUNTZ
;PATH IS INDEXED BY TRUNK AND PLY IN X2
Z ;TO ALLOW RAP AROUND
BPTR: BLOCK PSIZE*14 ;POINTER WITH 8 4-BIT FIELDS
BPTRO: Z
Z
PSKIP: BLOCK PSIZE*14
0 ;GUARD
BRUSH: BLOCK PSIZE*14
MOVX: Z
;TWIG SPACE IS INDEXED BY BRANCH AND TWIG
TRF: BLOCK 400
TLF: BLOCK 400
TLB: BLOCK 400
TRB: BLOCK 400
TSKIP: BLOCK 400
TE: BLOCK 400
TE2: BLOCK 400
;OVA OVP OVK OVRF OVLF OVLB OVRB OVSKIP OVE OVE2 OVMOVA OVMOVP FLZZ FLX2 IA IP IK MOA MOP MOK MORF MOLF MOLB MORB MOVES MOJ BPLY BSKIP BZ DEPTHM TIMEX DEPTH U2MAX COUNTM PRUZ SA SP SK STEM FLIT EEBFLF LOADTA LC RFILL DFILL DSAVE
;OV SPACE IS INDEXED BY TRUNK AND NUMBER IN X4
OVA: BLOCK 140
OVP: BLOCK 140
OVK: BLOCK 140
OVRF: BLOCK 140
OVLF: BLOCK 140
OVLB: BLOCK 140
OVRB: BLOCK 140
OVSKIP: BLOCK 140
OVE: BLOCK 140
OVE2: BLOCK 140
OVMOVA: BLOCK 140
OVMOVP: BLOCK 140
;FLIT SPACE IS INDEXED BY TRUNK IN X1
FLZZ: BLOCK 20 ;BEST ZZ FOR TRUNK AT FLIT TIME
FLX2: BLOCK 20 ;X1 VALUES AT FLIT TIME
;INITIAL BOARD AT START OF TREE SEARCH
IA: Z
IP: Z
IK: Z
;MOVE SPACE FOR ALL INITIAL MOVES
MOA: BLOCK 20
MOP: BLOCK 20
MOK: BLOCK 20
MORF: BLOCK 20
MOLF: BLOCK 20
MOLB: BLOCK 20
MORB: BLOCK 20
MOVES: BLOCK 20
MOJ: BLOCK 20
;BRANCH SPACE INDEXED BY BRANCH IN X4
BPLY: BLOCK 20
BSKIP: BLOCK 20
BZ: BLOCK 20 ;INDICATED BRANCH SCORE
DEPTHM: 60
TIMEX: 170 ;STANDARD TIME
DEPTH: 3 ;STANDARD DEPTH OF 3
U2MAX: 0 ;MAX MAIN DEPTH
COUNTM: 0 ;REMAINING COUNT
PRUZ: BLOCK PSIZE ;PRUNE COMPARE SCORE
0 ;EXTRA GUARD FOR TEMP PURPOSES
SA: BLOCK 100 ;TO SAVE GAME RECORD
SP: BLOCK 100
SK: BLOCK 100
0
STEM: Z ;TRUNK STEM FLAG
FLIT: Z ;FLIT FLAG
EEBFLF: Z ;USED IN TIP
INTERN LOADTA,DFILL,RFILL,DSAVE,RSAVE,LC
LOADTA:
LC:
RSAVE:
RFILL:
DFILL:
DSAVE: JRST NOTICE
;PL1 PL2 PL2B PL3 PL4C PL4D PL4A PL4E PL4B PL5 PL5A PL5E PL5B PL1TAB
;**********************************************************
; PLAUS READS DATA FROM MAIN STORAGE AT MA-10(X1) AND *
; STARTS WITH X3 AS INDEX SET TO 0,LOOKS AHEAD A VARIBLE *
; AMOUNT DEPENDING UPON THE NUMBER OF JUMPS ENCOUNTERED, *
; STORING DATA IN A SPACE DESIGNATED BY A PREFIX PL IN *
; PLACE OF THE PREFIX M USED FOR MAIN SPACE. *
; INDEX (X1) CONTAINS TRUNK(3), PLY(4), AND BRANCH(3) IN *
; THAT ORDER WHILE (X3) CONTAINS PLY(4) ONLY. *
; ANOTHER INDEX (X2) CONTAINS THE SAME VALUES AS (X1) BUT *
; WITHOUT BRANCH. BOARDS FOUND IN PLAUS WHICH MAY HAVE *
; TO BE SAVED ARE STORED IN TWIG SPACE AND INDEXED BY (X4)*
; X4 CONTAINS BRANCH(4) AND TWIG(4) *
; WE ENTER PLAUS INDEXED ONE LEVEL IN PLY BEYOND THE *
; LEVEL WHERE THE LAST BOARDS HAVE BEEN STORED (-10 SINCE *
; PLY IS MOVED OVER). X3 IS SET TO ZERO AT THIS LEVEL. *
;**********************************************************
PL1: SETZM PLFLG
MOVE U2,X2
ANDI U2,PMASK
MOVE Z,LOSE
MOVEM Z,PRUZ-1(U2)
MOVE Z,PRUCT-1(U2)
MOVEM Z,PRUC-1(U2)
MOVE U1,PLDPT
CAILE U2,2
JRST .+4
SKIPE GTCNT0
CAIG U2,1
MOVE U1,REPLYD
HLRZ Z,PL1TAB(U1)
MOVEM Z,TWIGD#
HRRZ Z,PL1TAB(U1)
MOVEM Z,AFTERD#
SETZB X3,X4 ;USED FOR PLY AND TWIG IN PLAUS
MOVE X1,X2 ;RESET X1 FROM X2
LSH X1,3 ;MAKE SPACE FOR BRANCH NUMBER
PL2: MOVE U2,X4
LSH U2,-4
SETZM MJW-1
MOVE A,MA-10(X1)
MOVEM A,PLA-1
MOVE P,MP-10(X1)
MOVEM P,PLP-1
MOVE K,MK-10(X1)
MOVEM K,PLK-1
MOVE Z,MRF-10(X1)
MOVEM Z,PLRF-1
MOVE Z,MLF-10(X1)
MOVEM Z,PLLF-1
MOVE Z,MLB-10(X1)
MOVEM Z,PLLB-1
MOVE Z,MRB-10(X1)
MOVEM Z,PLRB-1
MOVEM A,MOVAA
MOVE U1,MSKIP-10(X1)
MOVEM U1,BSKIP(U2)
ADD U1,PLY-1(X2)
MOVEM U1,PLY(X2)
MOVEM U1,BPLY(U2) ;NEWEST BASE PLY
MOVE Z,WIN
SUB Z,PLY-1(X2)
MOVEM Z,BZ(U2)
XOR U1,SIDE
ANDI U1,1
SKIPE TREE
PUSHJ PDP,TREM ;GET DATA FROM MAIN
MOVE Z,ME-10(X1)
MOVEM Z,EEB-1
MOVE Z,ME2-10(X1)
MOVEM Z,EEB2-1
PL2B: TRC U1,1
MOVEM U1,COLOR
MOVE Z,LOSE
ADD Z,PLY(X2)
MOVEM Z,ZZ-2
ADDI Z,1
MOVEM Z,ZZ-1 ;START WITH LOSING SCORE IN ZZ
PL3: PUSHJ PDP,PUP ;UPDATE USING DATA FROM MAIN
JRST PL11 ;NO MORE MOVES RETURN
SKIPE TREE
PUSHJ PDP,TWIGT
PL4C: MOVEM A,PLA(X3)
MOVEM P,PLP(X3)
MOVEM K,PLK(X3)
MOVEM A,TA(X4)
MOVEM P,TP(X4)
MOVEM K,TK(X4)
PUSHJ PDP,LEGAL ;NORMAL MOVE RETURN, DEFINES TWIG
JRST PL13 ;NO MOVE RETURN FROM LEGAL
AOJA X3,PL4E ;JUMP RETURN
ADDI X3,1 ;NORMAL INDEX OF PLY IN PLAUS
PL4D: MOVE Z,PLRF-1(X3)
MOVEM Z,TRF(X4)
MOVE Z,PLLF-1(X3)
MOVEM Z,TLF(X4)
MOVE Z,PLLB-1(X3)
MOVEM Z,TLB(X4)
MOVE Z,PLRB-1(X3)
MOVEM Z,TRB(X4)
MOVE Z,ZZ-3(X3)
MOVEM Z,ZZ-1(X3)
PUSHJ PDP,PUP ;UPDATE AGAIN TO SEE IF CORRECT PLACE
JRST PL4ERR ;TROUBLE,TREAT AS NO MOVE FROM LEGAL
CAIL X3,16
JRST PL4A ;OUT OF SPACE
SKIPE PLRF-1(X3) ;ARE THERE ANY MOVES LEFT?
JRST PL4A ;YES SO COMPLETE TWIG SAVE
SKIPE PLLF-1(X3)
JRST PL4A
SKIPE PLLB-1(X3)
JRST PL4A
SKIPN PLRB-1(X3) ;STILL NOT READY FOR TWIG SAVE
JRST PL4C
PL4A: MOVEM X3,XTWIG ;COMPLETE TWIG SAVE
MOVEM X3,TSKIP(X4) ;SAVE AS SKIP VALUE
MOVE Z,EEB-1(X3)
MOVEM Z,TE(X4)
MOVE Z,EEB2-1(X3)
MOVEM Z,TE2(X4)
TRNN X3,1
CAIL X3,12 ;STOP AT TWIG IF X3=10
CAMGE X3,TWIGD ;STOP AT TWIG IF G
JRST PL5A ;GO ON
SOJA X3,PL10Z ;BACK TO EVA
PL4E: MOVE Z,EEB-3(X3)
MOVEM Z,EEB-1(X3)
MOVE Z,EEB2-3(X3)
MOVEM Z,EEB2-1(X3)
CAIGE X3,17
JRST PL4D
SOJA X3,PL10Z ;THE BEST THAT CAN BE DONE
PL4B: CAIL X3,10
SOJA X3,PL5E
MOVE Z,ZZ-3(X3)
MOVEM Z,ZZ-1(X3)
PL5: PUSHJ PDP,PUP ;UPDATE AFTER TWIG SAVE
JRST PL8 ;NO MOVE RETURN FROM PUP
PL5A: MOVEM A,PLA(X3)
MOVEM P,PLP(X3)
MOVEM K,PLK(X3)
PUSHJ PDP,LEGAL ;FIND LEGAL MOVES
JRST PL14 ;NO MOVES? FIND OUT MEANING
AOJA X3,PL5C ;JUMPS SO GO DEEPER
TRNN X3,1
JRST .+3
CAMGE X3,AFTERD ;CAN WE STOP
AOJA X3,PL4B ;NO
PL5E: PUSHJ PDP,EVA
CAMG X3,XTWIG ;IS IT SAFE TO ALPHA PRUNE
JRST PL5B
CAMG Z,ZZ-2(X3) ;SCORE LEFT IN Z SO ALPHA TEST
SOJA X3,PL5 ;ALPHA SAYS "PRUNE IT!"
PL5B: MOVNS Z ;CHANGE SIGN FOR BETA TEST
CAMG Z,ZZ-1(X3) ;NOW TEST
JRST PL5
MOVEM Z,ZZ-1(X3) ;REPLACE WITH LARGER VALUE
MOVN U1,U2SAV
MOVEM U1,ZZZ-1(X3)
JRST PL5 ;TEST NEXT MOVE FROM SAME TWIG
PL1TAB: 1000003
1000005
1000007
3000003
3000005
3000007
;PL5C PL8 PL4ERR PL14 PL13 PL13A PL10Z PL10 PL10A
;X3 AT EVA VS REPLY,Y FLIT, STEM AND PLAY SETTINGS
; X3 AT
;SETTINGS 0 1 2 3 4 5
;ODD TWIG 1 1 1 3 3 3
;EVEN TWIG 10 10 10 10 10 10
;EVEN AFTER 2 2 2 2 2 2
;ODD AFTER 3 5 7 3 5 7
PL5C: CAIL X3,16 ;CHANGED 11-20-70
SOJA X3,PL5E
MOVE Z,EEB-3(X3)
MOVEM Z,EEB-1(X3)
MOVE Z,EEB2-3(X3)
MOVEM Z,EEB2-1(X3)
JRST PL4B
PL8: MOVN Z,ZZ-1(X3)
MOVN U1,ZZZ-1(X3)
CAMG X3,XTWIG ;EXHAUSTION BACK-UP BUT WHERE
JRST PL10 ;MUST BE JUST AT TWIG-SAVE
CAMG Z,ZZ-2(X3) ;HOW ABOUT BETA
SOJA X3,PL5
MOVEM Z,ZZ-2(X3) ;SAVE AS THE LARGER
MOVEM U1,ZZZ-2(X3)
SOJA X3,PL5 ;BACK UP BY ONE IN PLY
PL4ERR: MOVEI U1,[ASCIZ /INDEXING ERROR: PL4C./]
PUSHJ PDP,PRINT
JRST PL13
PL14: CAMLE X3,XTWIG ;SAFE TO BACK UP?
SOJA X3,PL5 ;YES
PL13: TRNN X3,1
JRST PL13A
MOVE Z,LOSE
ADD Z,PLY(X2)
ADD Z,X3
JRST PL10A
PL13A: MOVE Z,WIN
SUB Z,PLY(X2)
SUB Z,X3
MOVEM Z,ZZ-1
SETZM X3
JRST PL11
PL10Z: PUSHJ PDP,EVA
MOVNS Z
MOVN U1,U2SAV
;NOW THE NORMAL EXHAUSTION CASE
PL10: TRNN X3,1
MOVNS Z
ADDI X4,1
TRNN X4,17
SUBI X4,1 ;NO MORE ROOM
PL10A: CAMG Z,ZZ-1 ;ZZ-1 NOT INDEXED SINCE X3 ALWAYS = 0 HERE
JRST .+3
MOVEM Z,ZZ-1
MOVEM U1,ZZZ-1
SETZB X3,TA(X4)
JRST PL3 ;GO TO NEXT TWIG
;PL16 PL11
;TO GET BOARDS FROM OVERFLOW
PL16: CAIGE X4,220
MOVE X1,TRUNK
SKIPG OVA(X1) ;ARE THERE ANY MORE BOARDS
JRST PL17 ;NO, SO IT IS TIME TO SORT SCORES
MOVE U2,X4
LSH U2,-4
MOVE A,OVA(X1)
MOVEM A,PLA-1
MOVE P,OVP(X1)
MOVEM P,PLP-1
MOVE K,OVK(X1)
MOVEM K,PLK-1
MOVE Z,OVRF(X1)
MOVEM Z,PLRF-1
MOVE Z,OVLF(X1)
MOVEM Z,PLLF-1
MOVE Z,OVLB(X1)
MOVEM Z,PLLB-1
MOVE Z,OVRB(X1)
MOVEM Z,PLRB-1
MOVEM A,MOVAA
MOVE Z,WIN
SUB Z,PLY-1(X2)
MOVEM Z,BZ(U2)
MOVE U1,OVSKIP(X1)
MOVEM U1,BSKIP(U2)
ADD U1,PLY-1(X2)
MOVEM U1,PLY(X2)
MOVEM U1,BPLY(U2)
XOR U1,SIDE
ANDI U1,1
SKIPE TREE
PUSHJ PDP,TREOVM ;GET DATA FROM OVERFLOW
MOVE Z,OVE(X1)
MOVEM Z,EEB-1(X3)
MOVE Z,OVE2(X1)
MOVEM Z,EEB2-1(X3)
JRST PL2B
PL11: LSH X4,-4
MOVE Z,ZZ-1
MOVE U1,ZZZ-1
MOVE U2,BSKIP(X4)
MOVEM U2,PSKIP-1(X2)
TRNE U2,1
JRST .+3
MOVNS Z
MOVNS U1
MOVEM Z,BZ(X4)
MOVEM U1,BZZ(X4)
ADDI X4,1
MOVE Z,WIN
SUB Z,PLY(X2)
MOVEM Z,BZ(X4)
LSH X4,4
SETZB X3,TA(X4) ; RESET X3 AND STORE STOP
CAIL X4,200 ;DOES THIS PUT US IN OVERFLOW?
AOJA X1,PL16 ;YES, SO GET NEXT BOARD THERE
SKIPE MA-7(X1) ;IS THERE ANOTHER BRANCH
AOJA X1,PL2
;PL17 PL18 PL18D SORT13 TRETM PL17A
PL17: LSH X4,-4 ;DISCARD TWIG PORTION
MOVE U3,BRUSH-1(X2)
ADD U3,X4
MOVEM U3,BRUSH(X2)
CAIG X4,1
JRST PL17A ;ONLY ONE MOVE
CAILE X4,10 ;IS THERE OVERFLOW?
JRST PL19 ;MERGING NEEDED
SETZM BPTRO ;SET AS FLAG
PUSHJ PDP,SORT
PL18: MOVE X4,BESTM ;NOW MOVE TWIGS
SUBI X4,1
MOVE U3,X2
MOVE U1,PSKIP-2(U3)
TRNN U1,1
SOJA U3,.-2
ANDI U3,PMASK
MOVE Z,S-2(U3)
MOVNM Z,ZS
MOVE U2,X2
ANDI U2,PMASK
CAMLE U2,U2MAX
MOVEM U2,U2MAX
MOVE U1,BPLY(X4)
MOVEM U1,PLY(X2)
MOVE U1,BSKIP(X4)
MOVEM U1,PSKIP-1(X2)
TRNN U1,1
MOVE Z,S-1(U2)
MOVEM Z,S(U2)
SKIPE TREE
PUSHJ PDP,MTRE ;PRINT SELECTED MOVE
MOVN Z,BZ(X4)
CAMGE Z,GOOD
JRST .+7
MOVE U1,PLY-1(X2)
TRNE U1,1
JRST PL17B
SKIPE FLIT
JRST PL17C
JRST PL17D
MOVE U2,X2
ANDI U2,PMASK
CAMLE U2,WIDTH
SKIPN FLIT
JRST PL18D
SKIPN STEM
JRST PL18D
MOVE U1,BSKIP(X4)
CAIL U1,2
JRST PL18D
MOVE U3,BRUSH(X2)
LSH U3,1
CAMGE U3,DEPTHM
JRST PL18D
CAMG Z,S-1(U2)
JRST SET9A
CAML Z,ZS
JRST SET9
PL18D: LSH X4,4 ;ALLOW FOR TWIGS (4 BITS)
MOVE X1,X2
LSH X1,3 ;MAKE SPACE HERE ALSO
MOVEI U1,10 ;COUNT BRANCHES STORED IN MAIN
SORT13: MOVE U2,TA(X4)
MOVEM U2,MA(X1) ;THIS IS THE CORRECT LEVEL
JUMPE U2,SORT16 ;LAST TWIG HAS BEEN STORED
MOVE U2,TK(X4)
MOVEM U2,MK(X1)
MOVE U2,TP(X4)
MOVEM U2,MP(X1)
MOVE U2,TRF(X4)
MOVEM U2,MRF(X1)
MOVE U2,TLF(X4)
MOVEM U2,MLF(X1)
MOVE U2,TLB(X4)
MOVEM U2,MLB(X1)
MOVE U2,TRB(X4)
MOVEM U2,MRB(X1)
MOVE U2,TSKIP(X4)
MOVEM U2,MSKIP(X1)
MOVE U2,TE(X4)
MOVEM U2,ME(X1)
MOVE U2,TE2(X4)
MOVEM U2,ME2(X1)
SKIPE TREE
PUSHJ PDP,TRETM ;FROM TWIG TO MAIN
ADDI X4,1
SOJLE U1,SORT14 ;STOP IF MAIN IS FILLED
AOJA X1,SORT13 ;GET NEXT TWIG
TRETM: MOVE U2,MOVA(X4)
MOVEM U2,MMOVA(X1)
MOVE U2,MOVP(X4)
MOVEM U2,MMOVP(X1)
POPJ PDP,
PL17A: JUMPE X4,PL17B ;NONE ACCEPTABLE
MOVEM X4,BESTM
SETZM BPTR-1(X2)
JRST PL18
;PL17B PL17D PL17C TREM TREOVM SORT14 SORT15 TREOV
PL17B: SKIPE FLIT ;ARE WE FLITTING
JRST PL17C ;NO
MOVE U1,PLY-1(X2)
TRNE U1,1
JRST .+4
MOVE Z,ZZ-1
MOVEM Z,FLITZ
JRST SRT16Y ;BAD TRUNK SO DISCARD
PL17D: SETOM FLIT ;STOP IN THIS CASE
MOVE U1,COUNT
MOVEM U1,COUNTZ
SUB U1,COUNTM
MOVNM U1,COUNTM ;REMAINING COUNT
MOVE U1,DEPTH
MOVEM U1,DEPTHZ
SETZM DEPTHZ+1
SETZM COUNTZ+1
SETZM COUNTX
MOVE U1,STEMD
MOVEM U1,PLDPT
PL17C: MOVE U2,X2
ANDI U2,PMASK
MOVN Z,BZ(X4)
CAMLE Z,S-1(U2)
JRST SET9
JRST SET9A
TREM: MOVE U2,X4
LSH U2,-4
MOVE Z,MMOVA-10(X1)
MOVEM Z,MVAA(U2)
MOVE Z,MMOVP-10(X1)
MOVEM Z,MVPP(U2)
MOVE Z,MSKIP-10(X1)
MOVEM Z,MMSKIP(U2)
POPJ PDP,
TREOVM: MOVE U2,X4
LSH U2,-4
MOVE Z,OVMOVA(X1)
MOVEM Z,MVAA(U2)
MOVE Z,OVMOVP(X1)
MOVEM Z,MVPP(U2)
MOVE Z,OVSKIP(X1)
MOVEM Z,MMSKIP(U2)
POPJ PDP,
;WE MUST PUT THE REST IN THE OVERFLOW REGION
SORT14: MOVE U1,TRUNK
MOVEI U3,10
SORT15: MOVE U2,TA(X4)
MOVEM U2,OVA(U1)
JUMPE U2,SORT16 ;LAST TWIG
MOVE U2,TP(X4)
MOVEM U2,OVP(U1)
MOVE U2,TK(X4)
MOVEM U2,OVK(U1)
MOVE U2,TRF(X4)
MOVEM U2,OVRF(U1)
MOVE U2,TLF(X4)
MOVEM U2,OVLF(U1)
MOVE U2,TLB(X4)
MOVEM U2,OVLB(U1)
MOVE U2,TRB(X4)
MOVEM U2,OVRB(U1)
MOVE U2,TSKIP(X4)
MOVEM U2,OVSKIP(U1)
MOVE U2,TE(X4)
MOVEM U2,OVE(U1)
MOVE U2,TE2(X4)
MOVEM U2,OVE2(U1)
SKIPE TREE
PUSHJ PDP,TREOV ;FROM TWIG TO OVERFLOW
ADDI X4,1
SOJLE U3,SORT16
AOJA U1,SORT15 ;GET NEXT ONE
TREOV: MOVE U2,MOVA(X4)
MOVEM U2,OVMOVA(U1)
MOVE U2,MOVP(X4)
MOVEM U2,OVMOVP(U1)
POPJ PDP,
;SORT16 SRT16Y SRT16Z SRT16X SRT16E SRT16F
;ALL TWIGS HAVE BEEN SAVED
SORT16: ADDI X2,1 ;INDEX TO NEXT LEVEL
SKIPE FLIT
JRST SRT16E
MOVE U1,PLY-1(X2)
TRNN U1,1
JRST SRT16E
SETZM GETF3
MOVE X4,BESTM
MOVN Z,BZ-1(X4)
MOVN U3,BZZ-1(X4)
MOVE U1,BSKIP-1(X4)
TRNE U1,1 ;EVEN SKIP
JRST .+3
MOVNS Z ;YES
MOVNS U3
MOVEM Z,FLITZ#
; CAML Z,[-2000000]
CAML Z,[-4000000]
JRST SRT16Z
SRT16Y: SKIPN TREE
JRST .+5
MOVEI U1,[ASCIZ / BAD TRUNK /]
PUSHJ PDP,PRINT
MOVEI U1,2
ADDM U1,TREEX
SKIPN U5,ORDER
JRST EXIT
SETZ X5,
LSHC X5,4
JRST SORT2A
SRT16Z: MOVE U2,X2
LSH U2,-PSHIFT
ADDI U2,1
MOVEM X2,FLX2-1(U2)
MOVEM Z,FLZZ-1(U2)
ADD U3,[262626262626]
MOVSM U3,FLZZZ-1(U2)
EXCH Z,BEST
CAMN Z,WIN
JRST SRT16D ;MUST TRY ALL TRUNKS
SKIPE GETF1
JRST SRT16C ;WOOPS STILL MORE TRUNKS
SKIPE COUNTZ
JRST SRT16X
MOVE U1,COUNT
MOVEM U1,COUNTZ
MOVE U5,COUNTM
SUB U5,COUNT
MOVEM U5,COUNTM
MOVE U1,DEPTHM
MOVEM U1,DEPTHZ
MOVEI U3,4
CAML U5,COUNT
JRST .+5
IMULI U5,5
LSH U5,-2
MOVNS U3
CAMG U5,COUNT
ADD U1,U3
MOVEM U1,DEPTHM
SETZM DEPTHZ+1
SETZM COUNTZ+1
SRT16X: SETZM COUNTX
MOVE U1,STEMD
MOVEM U1,PLDPT
CAMLE Z,BEST ;STILL EXCHANGED, REMEMBER?
JRST SRT16D ;SHOULD STILL SWAP
EXCH Z,BEST ;RESTORE BEST
SRT16E: MOVE Z,EEB-1
MOVEM Z,EEB-2 ;BACKUP PREPARE
MOVE Z,EEB2-1
MOVEM Z,EEB2-2
SRT16F: MOVE U2,X2
ANDI U2,PMASK
JUMPE U2,TIP ;OUT OF SPACE
MOVE Z,BEST
CAMN Z,WIN
JRST PL1 ;KEEP GOING IN THIS CASE
CAMG U2,WIDTH
JRST PL1
MOVE U1,PLY-1(X2)
CAIL U1,20
JRST TIP
MOVE U1,BRUSH-1(X2)
CAML U1,DEPTHM
JRST TIP
JRST PL1
;SRT16C SRT16D SORT17 SORT18 SORT19 SORT20 SORT21 SORT2A SORT22
SRT16C: SETOM GETF3
SRT16D: EXCH Z,BEST ;RESTORE Z
MOVE U3,ORDER ;FIRST, MERGE ORDER
SETZB X3,U5
SORT17: LSHC X3,4
JUMPE X3,SORT18
CAMLE Z,FLZZ-1(X3)
JRST SORT18
LSH U5,4
IOR U5,X3
SETZM X3
JRST SORT17
SORT18: LSH U5,4
IOR U5,U2
SORT19: JUMPE X3,SORT20
LSH U5,4
IOR U5,X3
SETZM X3
LSHC X3,4
JRST SORT19
SORT20: SKIPN GETF3 ;ARE THERE OVERFLOW TRUNKS?
JRST SORT21 ;NO, SO GO AHEAD ANYWAY
MOVE X4,U5 ;REPLACE POOREST TRUNK
ANDI X4,17 ;SAVE POOREST POINTER
XOR U5,X4 ;DELETE FROM ORDER
MOVEM X4,X4S ;SAVE
SETZM X5
LSHC X5,4
JUMPE X5,.-1 ;LEFT JUSTIFY
MOVE Z,FLX2-1(X5)
MOVEM Z,BEST ;RESET BEST AFTER MERGE
LSHC X5,-4
MOVEM U5,ORDER
SKIPE TREE
PUSHJ PDP,RETREE
MOVEI X3,1
MOVE U1,SIDE
MOVEM U1,COLOR
MOVE A,PLAS ;FIX UP TO GET NEXT TRUNK
MOVEM A,PLA-1(X3)
MOVE P,PLPS
MOVEM P,PLP-1(X3)
MOVE K,PLKS
MOVEM K,PLK-1(X3)
MOVE PLSKS
MOVEM PLSKIP-1(X3)
MOVE Z,PLRFS
MOVEM Z,PLRF-1(X3)
MOVE Z,PLLFS
MOVEM Z,PLLF-1(X3)
MOVE Z,PLLBS
MOVEM Z,PLLB-1(X3)
MOVE Z,PLRBS
MOVEM Z,PLRB-1(X3)
MOVE Z,PLMJS
MOVEM Z,MJW-1(X3)
SETOM GETF2
SUBI X4,1
PUSHJ PDP,GET ;GET NEW TRUNK
SKIPE TREE
PUSHJ PDP,TERPRI
SUBI X4,1
JRST PLAY2
SORT21: SETZ X5,
LSHC X5,4
JUMPE X5,.-1 ;LEFT JUSTIFY AND STRIP OFF BEST
SORT2A: MOVEM U5,ORDER
MOVE X2,FLX2-1(X5)
MOVE X4,X2
TRNN X4,PMASK
SUBI X4,PSIZE
LSH X4,3-PSHIFT
TRZ X4,7
MOVEM X4,TRUNK ;NEW VALUE
SKIPE TREE
PUSHJ PDP,FLTREE
SETZ X5,
LSHC X5,4
MOVE Z,FLZZ-1(X5)
MOVEM Z,BEST
SKIPN U5,ORDER2
JRST SORT22
CAML Z,BEST2
JRST SORT22
EXCH Z,BEST2
MOVEM Z,BEST
EXCH U5,ORDER
MOVEM U5,ORDER2
SORT22: TRNN X2,PMASK
JRST TIP
MOVE U1,BRUSH-1(X2)
CAML U1,DEPTHM
JRST TIP
JRST PL1
;PL19 PL20 PL21 PL22 MERGE MERGE2 MERGE3 MERGE4 MERGE5 MERGE6 MERGE7 MERGE8 MERGE9 MERG12 TREMRG
PL19: MOVEM X4,X4S
CAIE X4,11
JRST PL20
MOVEM X4,BESTO ;NO SECOND SORT NEEDED
SETZM BPTRO
JRST PL21
PL20: PUSHJ PDP,SORT ;SORT OVERFLOW
MOVEM X3,BESTO ;SAVE OVERFLOW SORT RESULTS
MOVEM U3,BPTRO ;SAVE OVERFLOW POINTER
PL21: MOVEI X4,10
PUSHJ PDP,SORT
MOVE U1,BESTO ;BEST OVERFLOW POINTER
MOVE Z,BZ-1(U1) ;OVERFLOW BEST Z
MOVE U2,WORSTM
CAMLE Z,BZ-1(U2) ;COMPARE WITH MAIN WORST
JRST PL18 ;OVERFLOW CAN BE DISCARDED
MOVE X4,BESTM
CAMLE Z,BZ-1(X4) ;IS OVERFLOW BEST REALLY BEST?
JRST PL22 ;NO, TOO BAD, MORE WORK AHEAD
LSHC X3,-4 ;YES, PUT MAIN BEST BACK ON LIST
MOVEM U3,BPTR-1(X2)
MOVE X4,U1 ;PREPARE TO SAVE TWIGS
MOVEM U1,BESTM ;CALL THIS BESTM NOW
JRST MERGE ;GO ON FROM HERE
PL22: MOVE X3,U1 ;RESTORE BESTO TO ITS LIST
MOVE U3,BPTRO
LSHC X3,-4
MOVEM U3,BPTRO
MERGE: MOVE U3,BPTR-1(X2) ;GET BEST 8 TO SAVE
MOVE U5,BPTRO
JUMPE U5,PL18
SETZB X3,X5
SETZB Q,A
MOVEI U1,7 ;SAVE ONLY 7 MORE
LSHC X5,4
LSHC X3,4
MERGE2: MOVE Z,BZ-1(X5)
MERGE3: JUMPE X5,MERGE4 ;DON'T SORT IF THERE ARE NO MORE
CAMG Z,BZ-1(X3) ;GIVE PREFERENCE TO MAIN
JRST MERGE6
MERGE4: IOR A,X3
LSH A,4
MOVEI X3,0
LSHC X3,4
SOJG U1,MERGE3
MERGE5: LSH A,4
JUMPN Q,MERGE7
MOVEM A,BPTR-1(X2)
JRST PL18
MERGE6: IOR A,X5
LSH A,4
IOR Q,X5
MOVEI X5,0
LSHC X5,4
SOJLE U1,MERGE5
JUMPN X5,MERGE2
JRST MERGE4
MERGE7: MOVE U5,A
MOVEI U1,7
MOVEI A,0
MERGE8: MOVEI X5,0
LSHC X5,4
CAILE X5,10
JRST MERG12
IOR A,X5
LSH A,4
SOJG U1,MERGE8
MERGE9: LSH A,4
MOVEM A,BPTR-1(X2)
JRST PL18
MERG12: IOR A,X3
LSH A,4
SUBI X3,1
SUBI X5,11 ;FORM FOR OVERFLOW SPACE
MOVE X1,X2
LSH X1,3
IOR X1,X3
IOR X5,TRUNK ;GET PROPER TRUNK OVERFLOW NUMBER
MOVE U2,OVA(X5) ;MOVE DATA FROM OVERFLOW TO MAIN
MOVEM U2,MA-10(X1)
MOVE U2,OVP(X5)
MOVEM U2,MP-10(X1)
MOVE U2,OVK(X5)
MOVEM U2,MK-10(X1)
MOVE U2,OVRF(X5)
MOVEM U2,MRF-10(X1)
MOVE U2,OVLF(X5)
MOVEM U2,MLF-10(X1)
MOVE U2,OVLB(X5)
MOVEM U2,MLB-10(X1)
MOVE U2,OVRB(X5)
MOVEM U2,MRB-10(X1)
MOVE U2,OVSKIP(X5)
MOVEM U2,MSKIP-10(X1)
MOVE U2,OVE(X5)
MOVEM U2,ME-10(X1)
MOVE U2,OVE2(X5)
MOVEM U2,ME2-10(X1)
SKIPE TREE
PUSHJ PDP,TREMRG
MOVEI X3,0
LSHC X3,4
SOJG U1,MERGE8
JRST MERGE9
TREMRG: MOVE U2,OVMOVA(X5)
MOVEM U2,MMOVA-10(X1)
MOVE U2,OVMOVP(X5)
MOVEM U2,MMOVP-10(X1)
POPJ PDP,
;SETUPA SETUPB SORT SORTA SORT1 SORT2 SORT3 SORT4 SORT5 SORT6 SORT7 SORT8
;*********************************************
; SORT IS A ROUTINE THAT SORTS INDEXES *
; REFERENCING DATA ARRANGING IN ASSENDING *
; ORDER THE TAGS CONTAINED IN BZ-1. IT DOES *
;THIS BY SIMULATING A 4 TAPE SORT IN 4 *
; REGISTERS. *
;*********************************************
SETUPA: BYTE (4)0
BYTE (4)1
BYTE (4)1
BYTE (4)1,2
BYTE (4)1,2
BYTE (4)1,2,3
BYTE (4)1,2,3
BYTE (4)1,2,3,4
BYTE (4)1,2,3,4
BYTE (4)11
BYTE (4)11
BYTE (4)11,12
BYTE (4)11,12
BYTE (4)11,12,13
BYTE (4)11,12,13
BYTE (4)11,12,13,14
BYTE (4)11,12,13,14
SETUPB: BYTE (4)0
BYTE (4)0
BYTE (4)2
BYTE (4)3
BYTE (4)3,4
BYTE (4)4,5
BYTE (4)4,5,6
BYTE (4)5,6,7
BYTE (4)5,6,7,10
BYTE (4)0
BYTE (4)12
BYTE (4)13
BYTE (4)13,14
BYTE (4)14,15
BYTE (4)14,15,16
BYTE (4)15,16,17
BYTE (4)15,16,17 ;HANDLES ONLY 15
SORT: MOVE U3,SETUPA(X4) ;SET UP INPUT REGISTERS
MOVE U5,SETUPB(X4)
SETZB X3,X5 ;ZERO SAMPLING REGISTERS
SETZB A,K ;ZERO OUTPUT REGISTERS
LSHC X3,4
LSHC X5,4
SORTA: MOVE Z,BZ-1(X3)
CAMG Z,BZ-1(X5) ;FIND SMALLEST
JRST SORT1
EXCH U3,U5 ;SWAP IF NECESSARY
EXCH X3,X5
SORT1: MOVE Q,X3
LSH A,4 ;MAKE ROOM
IOR A,X3
SETZ X3,
JUMPE U3,SORT5 ;NO MORE ON U3, USE U5
LSHC X3,4 ;GET NEXT ENTRY
MOVE Z,BZ-1(X3)
CAMG Z,BZ-1(X5)
JRST SORT2
EXCH X3,X5
EXCH U3,U5 ;MUST SWITCH BOTH
SORT2: MOVE Z,BZ-1(Q) ;WILL IT GO
CAMG Z,BZ-1(X3)
JRST SORT1 ;YES
CAMLE Z,BZ-1(X5) ;MAYBE X5 WILL GO
JRST SORT6 ;NO, SO SWITCH OUTPUTS
SORT3: MOVE Q,X5 ;YES, MOVE X5 AND STICK WITH THIS INPUT
LSH A,4 ;MAKE ROOM
IOR A,X5
SETZ X5,
JUMPN U5,SORT4 ;ARE THER MORE
JUMPE X3,SORT7 ;END OF PASS
EXCH X3,X5
EXCH U3,U5 ;SWITCH INPUTS
EXCH A,K ;SWITCH OUTPUTS
JRST SORT3 ;START WITH ONE
SORT4: LSHC X5,4
SORT5: MOVE Z,BZ-1(Q)
CAMG Z,BZ-1(X5)
JRST SORT3 ;CONTINUE WITH U5
SORT6: EXCH A,K ;SWITCH OUTPUTS
JUMPN X3,SORT1 ;CONTINUE FROM U3
JRST SORT3
SORT7: JUMPE K,SORT8 ;EVERYTHING IS ON A
EXCH U3,A ;INTERCHANGE IN AND OUT
EXCH U5,K
LSHC X3,4
JUMPE X3,.-1 ;LEFT JUSTIFY AND GET FIRST IN X3
LSHC X5,4
JUMPE X5,.-1 ;DITTO
JRST SORTA ;GO AROUND AGAIN
SORT8: MOVE U3,A
JUMPE U3,.+3
LSHC X3,4
JUMPE X3,.-1 ;LEFT JUSTIFY
MOVEM X3,BESTM ;SAVE INDEX TO BEST
ANDI A,17
MOVEM A,WORSTM ;SAVE INDEX TO WORST
MOVEM U3,BPTR-1(X2)
POPJ PDP,
;TIP TIP1 TIP1A TIP1B TIP1C TIP1D TIP3 TIP4
;*****************************************************
; TIP IS A PART OF THE MAIN ROUTINE WHICH HANDLES *
; TIPPING OFF OF A BRANCH. IT IS SIMILAR TO PLAUS IN *
; INPUT REQUIREMENTS BUT IT TRANSFERS CONTROL TO SET.*
;*****************************************************
TIP: SETOM FLIT ;STOP FLITTING
SETZM BUFFFF#
SETZB X3,X4
MOVE X1,X2 ;PREPARE TO GET BOARD
LSH X1,3 ;START AT FIRST BRANCH
SKIPA
TIP1: AOS X4
SETZM MJW-1
CAIGE X4,10 ;ARE WE USING BOARDS FROM OVERFOLW
JRST TIP1A ;NO, SO GET BOARD FROM MAIN
CAIG X4,10
MOVE X1,TRUNK ;FIRST TIME IN OVERFLOW
SKIPG OVA(X1)
JRST SET10 ;NO MORE BOARDS
SKIPE TREE
PUSHJ PDP,TIPTOV
MOVE U2,OVSKIP(X1)
MOVE U1,OVE2(X1)
MOVE Z,OVE(X1)
JRST TIP1B
TIP1A: SKIPG MA-10(X1)
JRST SET10 ;NO MORE BOARDS
SKIPE TREE
PUSHJ PDP,TIPT
MOVE U2,MSKIP-10(X1)
MOVE U1,ME2-10(X1)
MOVE Z,ME-10(X1)
TIP1B: MOVEM U2,TISKIP
ADD U2,PLY-1(X2)
MOVEM U2,TIPPLY# ;PLY IN X2 MAY OVERFLOW
XOR U2,SIDE
ANDI U2,1
SETZM EEBFLF
MOVEM U1,EEB2-1(X3)
MOVEM Z,EEB-1(X3)
MOVE U1,TISKIP
TRC U2,1
MOVEM U2,COLOR
MOVE U2,X2
ANDI U2,PMASK
SKIPN U2
ADDI U2,PSIZE ;OVERFLOW IS POSSIBLE
MOVEM U2,U2S ;NEEDED IN TIP7
MOVE Z,S-1(U2)
TRNN U1,1 ;U1 CONTAINS PROPER SKIP
JRST TIP1C
MOVEM Z,ZZ-2(X3)
MOVE U2,X2
MOVE U1,PSKIP-2(U2)
TRNN U1,1
SOJA U2,.-2
ANDI U2,PMASK
SKIPN U2
ADDI U2,PSIZE
MOVEM U2,U2SS ;NEEDED IN TIP7
MOVE Z,S-2(U2)
MOVEM Z,ZZ-1(X3)
JRST TIP1D
TIP1C: MOVEM Z,ZZ-1(X3)
MOVE U2,X2
MOVE U1,PSKIP-2(U2)
TRNN U1,1
SOJA U2,.-2
ANDI U2,PMASK
SKIPN U2
ADDI U2,PSIZE
MOVEM U2,U2SS
MOVE Z,S-2(U2)
MOVEM Z,ZZ-2(X3)
TIP1D: CAIGE X4,10 ;TEST AGAIN
JRST TIP3
PUSHJ PDP,OVUP
JRST TIP7
JRST TIP4
TIP3: PUSHJ PDP,MUP
JRST TIP7 ;NO MORE MOVES
TIP4: SKIPE TREE
PUSHJ PDP,TIPT2
MOVEM A,PLA(X3)
MOVEM P,PLP(X3)
MOVEM K,PLK(X3)
PUSHJ PDP,LEGAL
JRST TIP8 ;NO LEGAL MOVES
AOJA X3,TIP4A
TRNN X3,1
SETOM EEBFLF
AOJA X3,TIP5
;TIP4A TIP5 TIP5A TIP5E TIP5C TIP5B TIP6 TIP6A TIP6B TIP7 TIP7A TIP8 TIP10
TIP4A: MOVE Z,EEB-3(X3)
MOVEM Z,EEB-1(X3)
MOVE Z,EEB2-3(X3)
MOVEM Z,EEB2-1(X3)
CAIL X3,10
SOJA X3,TIP5E
TIP5: MOVE Z,ZZ-3(X3)
MOVEM Z,ZZ-1(X3)
TIP5A: PUSHJ PDP,PUP
JRST TIP6 ;NO MORE MOVES
SKIPE TREE
PUSHJ PDP,TIPT3
MOVEM A,PLA(X3)
MOVEM P,PLP(X3)
MOVEM K,PLK(X3)
PUSHJ PDP,LEGAL
JRST TIP10 ;NO LEGAL MOVE
AOJA X3,TIP4A ;JUMP MOVE
TRNN X3,1
SETOM EEBFLF
CAIL X3,6
JRST TIP5E
SKIPN EEBFLF
AOJA X3,TIP5 ;MUST FIND NECESSARY EV
TIP5E: PUSHJ PDP,EVA ;NOW A FULL FINAL EVAL
TIP5C: SKIPE TREE
PUSHJ PDP,TREEMP
MOVM U5,Z
CAILE U5,400000 ;MARGIN EXEMPTION LEVEL
JRST .+7
LSH U5,-4 ;DIVIDE BY 16
MOVNS U5
ADD U5,Z
CAMLE U5,ZZ-2(X3)
JRST TIP5B
JRST .+3
CAMLE Z,ZZ-2(X3) ;DOES ALPHA LIKE?
JRST TIP5B ;YES
SOJG X3,TIP5A ;NO, SO CAN WE PUP?
JRST TIP1D ;NO, MUST MUP
TIP5B: MOVNS Z ;MUST CHANGE SIGN TO COMPARE WITH BETA
CAMLE Z,ZZ-1(X3) ;DOES BETA LIKE?
MOVEM Z,ZZ-1(X3) ;YES, SO WE GET NEW BETA
JRST TIP5A ;AND TRY A NEW BRANCH
TIP6: MOVE Z,ZZ-1(X3)
SUBI X3,1 ;CAN BACK 1 AT LEAST
MOVM U5,Z
CAILE U5,400000 ;MARGIN EXEMPTION LEVEL
JRST .+7
LSH U5,-4 ;DIVIDE BY 16
MOVNS U5
ADD U5,Z
CAMG U5,ZZ-2(X3)
JRST TIP6A
JRST .+3
CAMG Z,ZZ-2(X3) ;CAN WE PRUNE?
JRST TIP6A ;YES, ALPHA DOES NOT LIKE
MOVNS Z
CAMLE Z,ZZ-1(X3) ;DOES BETA LIKE?
MOVEM Z,ZZ-1(X3) ;YES
JUMPG X3,TIP5A ;GO TO PUP IF X3 > 0
JRST TIP1D ;ELSE GO TO MUP
TIP6A: JUMPG X3,TIP6B
MOVE U1,TISKIP
TRNE U1,1
AOJA X1,TIP1
MOVE U1,PSKIP-2(X2)
TRNN U1,1
SOJA X2,.-2
JRST SET
TIP6B: SOJG X3,TIP5A
JRST TIP1D
;AFTER MUP EXHAUSTION
TIP7: MOVE Z,ZZ-1(X3)
MOVE U1,TISKIP
TRNN U1,1
MOVNS Z
MOVE U2,U2SS
MOVM U5,Z
CAILE U5,400000 ;MARGIN EXEMPTION LEVEL
JRST .+7
LSH U5,-4 ;DIVIDE BY 16
MOVNS U5
ADD U5,Z
CAMLE U5,S-2(U2)
JRST TIP7A
JRST .+3
CAMLE Z,S-2(U2)
JRST TIP7A
TRNN X2,PMASK
SUBI X2,1 ;PLY OVERFLOW CASE
ANDI X2,PSIZE*20-PSIZE ;ALPHA WANTS NEW SET
ADD X2,U2 ;U2 MAY BE 10
JRST SET
TIP7A: MOVNS Z
MOVE U2,U2S
CAMLE Z,S-1(U2)
MOVEM Z,S-1(U2)
AOJA X1,TIP1
TIP8: MOVE Z,LOSE
ADD Z,TIPPLY
ADD Z,X3
SKIPE TREE
PUSHJ PDP,TREES
MOVNM Z,ZZ-1(X3)
JRST TIP7
TIP10: MOVE Z,LOSE
ADD Z,TIPPLY
ADD Z,X3
JRST TIP5C
;SETT3 SETT5 TWIGT TIPTOV TIPT TIPT2 TIPT3 MAS
SETT3: MOVE Z,MOVAA
MOVEM Z,MMOVA(X1)
MOVE Z,MOVPP
MOVEM Z,MMOVP(X1)
POPJ PDP,
SETT5: MOVE Z,MOVAA
MOVEM Z,OVMOVA(X1)
MOVE Z,MOVPP
MOVEM Z,OVMOVP(X1)
POPJ PDP,
TWIGT: MOVE Z,MOVAA
MOVEM Z,MOVA(X4)
MOVEM P,MOVP(X4)
POPJ PDP,
TIPTOV: MOVE U3,OVSKIP(X1)
MOVE U5,OVMOVA(X1)
MOVE U4,OVMOVP(X1)
MOVE U2,PLY-1(X2)
MOVEI U1,[ASCIZ /:/]
MOVEM U1,DOTFLG
JRST TRESTR
TIPT: MOVE U3,MSKIP-10(X1)
MOVE U5,MMOVA-10(X1)
MOVE U4,MMOVP-10(X1)
MOVE U2,PLY-1(X2)
MOVEI U1,[ASCIZ /;/]
MOVEM U1,DOTFLG
JRST TRESTR
TIPT2: SKIPE X3
POPJ PDP,
MOVE U5,MOVAA
MOVE U4,P
MOVE U2,TIPPLY
MOVEI U3,1
MOVEI U1,[ASCIZ / /]
TRNE U2,1
MOVEI U1,[ASCIZ /,/]
MOVEM U1,DOTFLG
JRST TRESTR
TIPT3: MOVE U5,PLA-1(X3)
MOVE U4,P
MOVE U2,TIPPLY
ADD U2,X3
MOVEI U3,1
MOVEI U1,[ASCIZ / /]
TRNE U2,1
MOVEI U1,[ASCIZ /,/]
MOVEM U1,DOTFLG
JRST TRESTR
MAS: Z
;GTREE STREE FLTREE TRTRE
GTREE: MOVEI U1,[ASCIZ / /]
MOVEM U1,DOTFLG
MOVE U5,IA
MOVE U4,MOP(X4)
MOVEI U2,0
MOVEI U3,1
PUSHJ PDP,TREE1
MOVEI U1,[ASCIZ / TRUNK NUMBER /]
PUSHJ PDP,PRINT
MOVE U1,X4
ADDI U1,1
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
SETZM BUFFF2
MOVEI U1,20
MOVEM U1,TREEX
POPJ PDP,
STREE: MOVE U5,MMOVA-10(X1)
MOVE U4,MMOVP-10(X1)
MOVE U2,PLY-1(X2)
MOVE U3,MSKIP-10(X1)
MOVEI U1,[ASCIZ / /]
TRNE U2,1
MOVEI U1,[ASCIZ /,/]
MOVEM U1,DOTFLG
JRST TREE1
FLTREE: SETOM PRFLG
MOVEI U1,[ASCIZ /,/]
MOVEM U1,DOTFLG
MOVEI U1,[ASCIZ / FLIT TO TRUNK /]
PUSHJ PDP,PRINT
LSH X4,-3
ADDI X4,1
MOVE U1,X4
PUSHJ PDP,NUMOUT
MOVEI U1,3
ADDM U1,TREEX
MOVN Z,FLITZ
SETZ X3,
MOVE U1,LOSE
MOVEM U1,ZZ-1(X3)
MOVEM U1,ZZ-2(X3)
JRST TREES
TRTRE: PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ / GOING TO TRUNK /]
PUSHJ PDP,PRINT
MOVE U1,X1
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVEI U1,40
MOVEM U1,TREEX
POPJ PDP,
;RETREE TREES TREES2
RETREE: MOVEI U1,[ASCIZ / REPLACE TRUNK /]
PUSHJ PDP,PRINT
MOVE U1,X4
PUSHJ PDP,NUMOUT
MOVEI U1,3
ADDM U1,TREEX
MOVN Z,FLITZ
SETZ X3,
MOVE U1,LOSE
MOVEM U1,ZZ-1(X3)
MOVEM U1,ZZ-2(X3)
JRST TREES
TREES: MOVEM K,ACSAV+16
MOVEI K,ACSAV
BLT K,ACSAV+15
MOVE U2,PLY(X2) ;COMPUTE LAST PLAY
SKIPE TIPPLY ;X2 MAY BE FALSE IN TIP
MOVE U2,TIPPLY
ADD U2,X3
ANDI U2,1
MOVEM U2,LASTP
MOVE U2,TREEX ;PRINT SCORES
CAILE U2,20
JRST TREES2
CAIL U2,20
JRST .+4
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
AOJA U2,.-4
MOVE U1,ZZ-1(X3)
MOVE U2,ZZ-2(X3)
SKIPE LASTP
EXCH U1,U2 ;REPORT ALWAYS FOR PDP-6
CAME U1,LOSE
JRST .+4
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SKIPA
PUSHJ PDP,SOUT
MOVN U1,Z
SKIPE LASTP
MOVNS U1
PUSHJ PDP,SOUT
MOVN U1,U2
CAME U1,WIN
PUSHJ PDP,SOUT
TREES2: PUSHJ PDP,TERPRI
SETZM BUFFF2
MOVEI U1,40
MOVEM U1,TREEX
MOVSI K,ACSAV
BLT K,K
POPJ PDP,
;SOUT SOUT2
SOUT: MOVEM Z,ZSAV#
CAMLE U1,BAD
JRST .+10
SUB U1,LOSE
ADDI U1,1
PUSHJ PDP,SOUT2
MOVEI U1,[ASCIZ /LOSS/]
PUSHJ PDP,PRINT
MOVE Z,ZSAV
POPJ PDP,
CAMGE U1,GOOD
JRST .+11
MOVNS U1
ADD U1,WIN
ADDI U1,1
PUSHJ PDP,SOUT2
MOVEI U1,[ASCIZ / WIN/]
PUSHJ PDP,PRINT
MOVE Z,ZSAV
POPJ PDP,
ASH U1,-5
ADDI U1,200
MOVEM U1,U1S
ASH U1,-10
PUSHJ PDP,SOUT2
MOVE U1,U1S
ANDI U1,377
SUBI U1,200
PUSHJ PDP,SOUT2
MOVE Z,ZSAV
POPJ PDP,
SOUT2: SETZ X2,
MOVM Z,U1
SKIPGE U1
SOS X2
JRST RJ2
;TREEX TREE UPNUMS UPNUM RAD UPNUM0 UPNUM1
TREEX: 20 ;SET LARGE AT START
TREE: 0 ;PRINT TREES
UPNUMS: BLOCK 20
UPNUM: SOS U2
MOVEM K,UPNUMS+16
MOVEI K,UPNUMS
BLT K,UPNUMS+15
SETZM P
SKIPE DIFF
JRST UPNUM0
SKIPE TOTAL
JRST UPNUM1
MOVE A,COUNT ;GET NUMBER OF UPDATED BOARDS
CAIGE A,100000
AOS P
CAIGE A,10000
AOS P
CAIGE A,1000
AOS P
CAIGE A,100
AOS P
CAIGE A,10
AOS P
JUMPE P,.+4
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJG P,.-2
MOVE U1,A
RAD: PUSHJ PDP,OCT2
MOVSI K,UPNUMS
BLT K,K
POPJ PDP,
UPNUM0: SETZM A
CALL A,[SIXBIT /RUNTIME/]
MOVE U1,DIFFT
MOVEM A,DIFFT
SUB A,U1
JRST .+4
UPNUM1: SETZM A
CALL A,[SIXBIT /RUNTIME/]
SUB A,TIME
CAIGE A,↑D100000
AOS P
CAIGE A,↑D10000
AOS P
CAIGE A,↑D1000
AOS P
CAIGE A,↑D100
AOS P
CAIGE A,↑D10
AOS P
JUMPE P,.+4
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJG P,.-2
MOVE U1,A
PUSHJ PDP,NUMOUT
JRST RAD+1
;CTELLC DEBUG TELLC MTRE TREE1 TREE2 CORR
CTELLC: SETCMM TELLC
POPJ PDP,
DEBUG: SETCMM TELLC
PUSHJ PDP,LPTREE
POPJ PDP,
TELLC: Z
MTRE: MOVE U3,BRUSH(X2)
LSH U3,1
CAML U3,DEPTHM
AOSA PRFLG#
SETOM PRFLG
MOVE U5,MVAA(X4)
MOVE U4,MVPP(X4)
MOVE U2,PLY-1(X2)
MOVE U3,MMSKIP(X4)
MOVEI U1,[ASCIZ / /]
TRNE U2,1
MOVEI U1,[ASCIZ /,/]
MOVEM U1,DOTFLG
TREE1: XOR U5,U4
AND U4,U5
XOR U5,U4 ;YES, HE REALLY MEANS IT!
CAML U2,TREEX
JRST TREE2
SKIPN BUFFF2
JRST .+4
MOVEI U1,[ASCIZ / # /]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
SETOM BUFFF2
MOVEM U2,TREEX
JUMPLE U2,.+7
SKIPE TELLC
PUSHJ PDP,UPNUM
JUMPLE U2,.+4
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJG U2,.-2
TREE2: MOVE U1,DOTFLG
SKIPN PRFLG
MOVEI U1,[ASCIZ /!/]
PUSHJ PDP,PRINT
ADDM U3,TREEX
PUSHJ PDP,FIND
MOVE U5,U1
CAIL U1,12
JRST .+3
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVE U1,U5
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /-/]
PUSHJ PDP,PRINT
MOVE U5,U4
PUSHJ PDP,FIND
MOVE U5,U1
PUSHJ PDP,NUMOUT
CAIL U5,12
JRST .+3
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SUBI U3,1 ;ALLOW FOR REPORTABLE BOARD
JUMPLE U3,.+4 ;NO J'S NEEDED
MOVEI U1,[ASCIZ / J /]
PUSHJ PDP,PRINT
SOJG U3,.-2
POPJ PDP,
CORR: JRST NOTICE
;TREEMP TREMP1 TREMP3 TRESTR TREST2 TREST3 BUFFX BUFFF BUFFF2 BUFFF3 BUFF
TREEMP: SKIPE BUFFF ;EXPANDED TIPS
JRST TREES ;YES
SKIPE BUFFFF
JRST .+3
SETOM BUFFFF
JRST .+6
MOVN U1,Z
CAMG U1,ZZ-1(X3)
POPJ PDP, ;OMIT THIS LINE
CAMG Z,ZZ-2(X3)
POPJ PDP, ;OMIT THIS LINE
SETZM BUFFF3 ;BUFF IS TO BE PRINTED
SKIPE BUFFF2
JRST .+11
MOVE U2,TREEX ;LINE HAS JUST BEEN EMPTIED
JUMPLE U2,.+7
SKIPE TELLC
PUSHJ PDP,UPNUM
JUMPLE U2,.+4
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJG U2,.-2
SETZ U3,
TREMP1: MOVE U1,BUFF(U3)
JUMPE U1,TREES ;BUFF IS EMPTY
HRRZ U1,BUFF(U3)
PUSHJ PDP,PRINT
HLRZ U5,BUFF(U3)
JUMPE U5,TREMP3
LSH U5,-6
CAIL U5,12
JRST .+3
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVE U1,U5
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /-/]
PUSHJ PDP,PRINT
HLRZ U5,BUFF(U3)
SETZM BUFF(U3)
ANDI U5,77
MOVE U1,U5
PUSHJ PDP,NUMOUT
CAIL U5,12
JRST .+3
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
TREMP3: AOS TREEX
AOJA U3,TREMP1
TRESTR: SKIPE BUFFF ;EXPAND TIPS
JRST TREE1 ;YES
MOVEM X1,X1S
XOR U5,U4
AND U4,U5
XOR U5,U4
SKIPE BUFFF3 ;WAS BUFF PRINTED
JRST TREST2
MOVEI X1,17 ;YES SO EMPTY
SETZM BUFF(X1)
SOJGE X1,.-1
SETZB X1,BUFFX
MOVEM U2,TREEX
JRST TREST3
TREST2: MOVE X1,BUFFX
MOVE U1,X1
ADD U1,TREEX
CAML U2,U1
JRST .+5
SETZM BUFF(X1)
SKIPE X1
SOJGE X1,.-6
MOVEM U2,TREEX
TREST3: MOVE U1,DOTFLG
MOVEM U1,BUFF(X1)
PUSHJ PDP,FIND
LSH U1,30
IORM U1,BUFF(X1)
MOVE U5,U4
PUSHJ PDP,FIND
LSH U1,22
IORM U1,BUFF(X1)
ADDI X1,1
SUBI U3,1
JUMPLE U3,.+5
MOVEI U1,[ASCIZ / J /]
MOVEM U1,BUFF(X1)
ADDI X1,1
SOJG U3,.-2
MOVEM X1,BUFFX
MOVE X1,X1S
SETOM BUFFF3 ;NEW DATA IN BUFF
POPJ PDP,
BUFFX: Z ;BUFFER INDEX
BUFFF: Z ;NON-ZERO TO EXPAND TIPS
BUFFF2: Z ;LINE TERPRI FLAG
BUFFF3: Z ;ANOTHER LINE TER FLAG
BUFF: BLOCK 20 ;TREE BUFFER
;MOVIN MOVIN0 MOVIN1 MOVIN2 MOVIN3 MOVIN4 MORE MOVIN5 MOVIN6 MOVIN7 MOVIN8 MKMOV MKPLAY
;**************************************************************
; THESE I/O ROUTINES USE REGISTERS U1, U2, U3, U4, U5, X4, }
;AND PDP. REGISTERS X1, X2, X3, AND X5 ARE USED BY OTHER }
;ROUTINES (SAUTER'S) WHICH ARE CALLED BY THESE ROUTINES. }
;**************************************************************
;MOVIN IS CALLED BY THE INTERPRETER WHEN A NUMBER IS
;ENCOUNTERED AS THE FIRST ELEMENT OF A COMMAND.
MOVIN: PUSHJ PDP,SETLEG ;FIX ORF, ETC. FOR NEXT MOVE
MOVE U2,[POINT 4,MJ]
MOVEM U2,MJBP ;INIT BYTE POINTER
MOVE U2,[POINT 6,MJBP,5]
MOVEM U2,BPBP ;INIT BYTE POINTER'S BYTE POINTER
MOVEI I,300
HRLZI U3,400000
HRRZS U1
PUSHJ PDP,OUTIN ;FIX THE NUMBER
MOVN U4,U1
LSH U3,(U4) ;MOVE BIT NOW IN PROPER POSITION
PUSHJ PDP,SCAN ;GET SEPARATER
TLNE U1,-1 ;NUMBER OR IDENTIFIER?
JRST .+3 ;NUMBER, SPACE OR "," MUST HAVE BEEN DELIMITER
PUSHJ PDP,EOL ;GET THE NEXT NUMBER
JRST ERR
PUSHJ PDP,OUTIN ;FIX THE NUMBER
MOVE U2,U1
ADD U4,U2
MOVM U1,U4
CAIGE U1,6 ;IS HE TRYING TO MAKE A JUMP?
JRST MOVIN0 ;NO
SKIPE OJ ;DID LEGALS FIND JUMP MOVES?
JRST .+3 ;YES
MOVEI U1,[ASCIZ /JUMP?/]
JRST IMP+1
ASH U4,-1
JRST MOVIN1
MOVIN0: SKIPN OJ ;IS IT A JUMP MOVE?
JRST MOVIN1 ;NO
MOVEI U1,[ASCIZ /JUMP!/]
JRST IMP+1
MOVIN1: SETZB X4,X3
JUMPL U4,MOVIN3
CAIE U4,4
JRST MOVIN2
MOVE U1,ORF
TDNN U1,U3 ;IS IT A LEGAL MOVE?
JRST IMP ;NO
JRST MORE
MOVIN2: CAIE U4,5
JRST IMP
MOVE U1,OLF
TDNN U1,U3 ;IS IT A LEGAL MOVE?
JRST IMP ;NO
JRST MORE
MOVIN3: TLZ U4,777777
CAIE U4,-4
JRST MOVIN4
TLO U4,777777
MOVE U1,OLB
TDNN U1,U3 ;IS IT A LEGAL MOVE?
JRST IMP ;NO
JRST MORE
MOVIN4: CAIE U4,-5
JRST IMP
TLO U4,777777
MOVE U1,ORB
TDNN U1,U3 ;IS IT A LEGAL MOVE?
JRST IMP ;NO
MORE: PUSHJ PDP,SCAN
SKIPN ACCFLG
JRST .+5
MOVEI U2,MOVIT-1
CAIN U1,15
MOVEM U2,(PDP)
CAIE U1,","
TLZN U1,400000
JRST MKMOV
PUSHJ PDP,OUTIN ;FIX THE NUMBER
MOVN U5,U2
ADD U5,U1
ASH U5,-1
ROT X4,(X3)
JUMPL U5,MOVIN6
CAIE U5,4 ;RFMJ?
JRST MOVIN5 ;NO, BUT MAYBE LFMJ
TLO X4,40000 ;SET RF BIT
JRST MOVIN8
MOVIN5: CAIE U5,5 ;LFMJ?
JRST IMP ;ILLEGAL MOVE
TLO X4,100000 ;SET LF BIT
JRST MOVIN8
MOVIN6: TLZ U5,777777 ;SO THAT THE NEXT INSTR. WILL WORK
CAIE U5,-4 ;LBMJ?
JRST MOVIN7 ;NO, BUT MAYBE RBMJ
TLO U5,777777 ;UNDOES THAT WHICH HAS BEEN DONE
TLO X4,200000 ;SET LB BIT
JRST MOVIN8
MOVIN7: CAIE U5,-5 ;RBMJ?
JRST IMP ;ILLEGAL MOVE
TLO U5,777777
TLO X4,400000 ;SET RB BIT
MOVIN8: MOVNS X3
ROT X4,(X3)
MOVMS X3
ADDI X3,4
MOVE U2,U1
JRST MORE
MKMOV: AOS FSTCR
MOVEM X4,MJW
MOVE U1,U3
MOVE A,OA ;LOAD BOARD INTO A, P, AND K
MOVE P,OP
MOVE K,OK
AOS SI
MOVN U2,U4
MOVE X5,MJW
MOVEI X3,1
PUSHJ PDP,UPDATE+2 ;UPDATE
MOVEM A,IA ;STORE BOARD
MOVEM P,IP
MOVEM K,IK
MOVEM A,OA
MOVEM P,OP
MOVEM K,OK
SKIPE ACCFLG#
POPJ PDP,
MKPLAY: PUSHJ PDP,SAVBD ;SAVE BOARD POSITION
SETCMM LPFLAG
SETZM Z
SETZM EVTIMT
CALL Z,[SIXBIT /RUNTIME/]
MOVEM Z,TIME
MOVE A,OA ;ADDED FEB 25 70
MOVE P,OP
MOVE K,OK
PUSHJ PDP,PLAY ;NOW GO PLAY CHECKERS
;MOVOUT MOVOUX MOVOUY MOVOUZ SUM SUM1
;MOVOUT IS CALLED BY THE CHECKER PROGRAM AFTER IT HAS FINALLY
;DECIDED WHAT TO DO.
MOVOUT: SETZM Z
CALL Z,[SIXBIT /RUNTIME/]
SUB Z,TIME
MOVEM Z,TIME
MOVE A,OA
MOVE P,OP
MOVE K,OK
MOVE U2,U1
MOVE U3,U1
SKIPE HEADFL
PUSHJ PDP,HEAD
MOVE U1,SI ;GET MOVE INDEX
PUSHJ PDP,NUMOUT ;WRITE MOVE INDEX
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT ;WRITE TAB
HLRZ U1,U3 ;GET STARTING POSITION
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /-/]
PUSHJ PDP,PRINT ;PRINT HYPHEN
HRRZ U1,U3 ;GET DESTINATION POSITION
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVE U1,COUNT
PUSHJ PDP,RJOUT
MOVEI U1,[ASCIZ /./]
PUSHJ PDP,PRINT
SKIPE SFLAG
PUSHJ PDP,TELLS
SKIPE DWFLAG
PUSHJ PDP,TELLDW
SKIPE RUNT
PUSHJ PDP,RUNT+1
; MOVEI U1,[ASCIZ / E /]
; PUSHJ PDP,PRINT
; MOVE U1,EVTIMT
; MOVEM U1,TIME
; PUSHJ PDP,RUNT+1
SKIPE USEBOK
JRST MOVOUZ
MOVE U1,U2MAX
PUSHJ PDP,RJOUT
MOVE U1,TIMEX
LSH U1,11
PUSHJ PDP,RJOUT
PUSHJ PDP,TERPRI
; SKIPN COUNT ;THIS DID NOT WORK SKIPE SFLAG BYPASSES ALWAYS
; JRST MOVOUZ ;Bypass further reporting on forced move
MOVEI X3,1
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVOUX: MOVE U2,MOVXZ(X3)
JUMPL U2,MOVOUY
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
HLRZ U1,MOVES(U2)
CAIL U1,12
JRST .+4
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
HLRZ U1,MOVES(U2)
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /-/]
PUSHJ PDP,PRINT
HRRZ U1,MOVES(U2)
CAIL U1,12
JRST .+4
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
HRRZ U1,MOVES(U2)
PUSHJ PDP,NUMOUT
AOJA X3,MOVOUX
MOVOUY: PUSHJ PDP,TERPRI
SETZ X3,
JRST .+2
PUSHJ PDP,RJOUT
SKIPE U1,DEPTHZ(X3)
AOJA X3,.-2
PUSHJ PDP,TERPRI
SETZ X3,
JRST .+3
SUB U1,COUNTZ-2(X3)
PUSHJ PDP,RJOUT
SKIPE U1,COUNTZ(X3)
AOJA X3,.-3
MOVOUZ: SKIPG LPFLAG
JRST .+10
MOVEI X1,14
PUSHJ PDP,TYO
SKIPE TREOUT
PUSHJ PDP,TREOFF ;To close TREE file to save it
SETCMM LPFLAG
MOVE U1,U2
JRST MOVOUT+10
SETZM COUNT
AOS SI
PUSHJ PDP,SAVBD
JRST TERPRI
SUM: SETZB X4,SI
SETZM HEADFL
PUSHJ PDP,TERPRI
AOS U4,SI
SKIPN U5,SP+1(U4)
JRST SUM1
MOVE P,U5
XOR U5,SA(U4)
PUSHJ PDP,FINDM+2
PUSHJ PDP,MOVOUT+2
JRST SUM+3
SUM1: MOVE U1,U4
JRST GO+5
;HEAD SAVBD RECOUT RECIN RECORD GAMESV IMP
HEAD: PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
SKIPLE LPFLAG
POPJ PDP,
SETZM HEADFL
MOVEI U1,[ASCIZ / MOVE # OF BDS/]
PUSHJ PDP,PRINT
MOVEI U1,[ASCIZ / PIECE EVAL PLY/]
SKIPE SFLAG
PUSHJ PDP,PRINT
MOVEI U1,[ASCIZ / TIME/]
SKIPE RUNT
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
POPJ PDP,
SAVBD: MOVE X5,SI
CAIL X5,100 ;LIMIT OF TABLE SIZE
POPJ PDP,
MOVEM A,SA(X5)
MOVEM P,SP(X5)
MOVEM K,SK(X5)
RECOUT: INIT 12,17
SIXBIT /DSK/
Z
HALT
SETZM GAMESV+3
ENTER 12,GAMESV
HALT
OUTPUT 12,RECORD
RELEAS 12,
POPJ PDP,
RECIN: INIT 12,17
SIXBIT /DSK/
Z
SETZM GAMESV+3
LOOKUP 12,GAMESV
JRST .+4
INPUT 12,RECORD
RELEAS 12,
POPJ PDP,
MOVEI U1,[ASCIZ /GAME FILE NOT FOUND./]
PUSHJ PDP,PRINT
JRST TERPRI
RECORD: IOWD 100,SA
Z
GAMESV: SIXBIT /GAME/
SIXBIT /CHK/
0
SIXBIT /CH2ALS/
IMP: MOVEI U1,[ASCIZ /IMP!/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
POPJ PDP,
;ACCEPT ACC ACC1 ACC2 ACC3 ACCMOV MOVIT
;****************************************************************
;ACCEPT WILL ACCEPT A STARTING BOARD POSITION FROM THE TTY. *
;NO ERROR CHECKING IS DONE AGAINST STARTING WITH A BOARD WITH *
;MORE THAN 12 BLACK OR WHITE PIECES. THUS, AN OPPONENT CAN *
;GIVE THE MACHINE A HANDICAP BY GIVING HIMSELF 13 OR 14 PIECES. *
; *
;REGISTERS U1, U3, U4, U5, X1, X2, AND X3 ARE DESTROYED BY *
;ACCEPT. *
;****************************************************************
ACCEPT: SETZM FSTCR
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
SETZM U5
PUSHJ PDP,EOL ;GOBBLE UP CR IN BUFFER
SKIPA
JRST ACCMOV
MOVEI U1,[ASCIZ /BLACK PIECES ON: /]
PUSHJ PDP,PRINT
PUSHJ PDP,ACC ;READ IN BLACK PIECES
MOVEM U3,OA ;STORE BLACK PIECES
MOVEI U1,[ASCIZ /WHITE PIECES ON: /]
PUSHJ PDP,PRINT
PUSHJ PDP,ACC ;NOW READ IN WHITE PIECES
MOVEI U1,[ASCIZ /BLACK TO PLAY? /]
PUSHJ PDP,PRINT
MOVEI U1,1
MOVEM U1,SI
PUSHJ PDP,NOYES
AOSA SI
JRST .+3 ;BLACK IS TO PLAY
EXCH U3,OA
SETZM SIDE
MOVEM U3,OP ;STORE WHITE PIECES
MOVEM U5,OK
MOVE A,OA
MOVE P,OP
MOVE K,OK
PUSHJ PDP,SAVBD
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
POPJ PDP,
ACC: SETZM U3
ACC1: HRLZI U4,400000
ACC2: PUSHJ PDP,SCAN
CAIN U1,15 ;CR?
POPJ PDP, ;YES
TLZE U1,400000 ;NUMBER?
JRST ACC3 ;YES
HRRZS U1 ;GET RID OF LEFT HALF FLAG BITS
CAIN U1,K ;IF A KING ...
TDO U5,U4 ; ... SET KING BIT
JRST ACC1
ACC3: PUSHJ PDP,OUTIN ;CONVERT TO INTERNAL NUMBERS
MOVNS U1
ROT U4,(U1) ;ROTATE TO BIT'S POSITION
TDO U3,U4 ;SET PIECE'S BIT
JRST ACC2
ACCMOV: SETOM ACCFLG
PUSHJ PDP,MOVIN
PUSHJ PDP,MOVIT
PUSHJ PDP,EOL
AOSA ACCFLG
JRST .-4
POPJ PDP,
SETZM ACCFLG
MOVIT: MOVEI U1,1
XORM U1,SIDE
MOVEM A,OA
MOVEM P,OP
MOVEM K,OK
POPJ PDP,
;GO ERRGO PB PW SETB SETW BTERMS WTERMS PC SIG PORT PDP16
;********************************************
;GO WILL INITIATE PLAY AT THE BOARD SPECIFIED
;********************************************
GO: PUSHJ PDP,TERPRI
PUSHJ PDP,EOL
SOS U1,SI
CAIGE U1,1 ;NUMBER IN PERMISSABLE RANGE?
JRST ERRGO ;NO
MOVEM U1,SI ;STORE NEW INDEX
MOVE A,SA(U1) ;GET BOARD
MOVE P,SP(U1)
MOVE K,SK(U1)
MOVEM A,OA
MOVEM P,OP
MOVEM K,OK
SETZM SIDE
TRNN U1,1
AOS SIDE
POPJ PDP,
ERRGO: MOVEI U1,[ASCIZ /BOARD OUT OF RANGE./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
PB: MOVE U1,SI
TRNN U1,1
POPJ PDP,
SETZM SIDE
PUSHJ PDP,TERPRI
PUSHJ PDP,PDP16
MOVEI U1,[ASCIZ / IS NOW PLAYING BLACK./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
AOS FSTCR
JRST MKPLAY
PW: MOVE U1,SI
TRNE U1,1
POPJ PDP,
SKIPN SIDE
AOS SIDE
PUSHJ PDP,TERPRI
PUSHJ PDP,PDP16
MOVEI U1,[ASCIZ / IS NOW PLAYING WHITE./]
JRST PB+7
SETB: MOVEI U1,[ASCIZ /BLACK = /]
PUSHJ PDP,PRINT
PUSHJ PDP,OCTIN
MOVEM U1,BTERMS
PUSHJ PDP,TERPRI
POPJ PDP,
SETW: MOVEI U1,[ASCIZ /WHITE = /]
PUSHJ PDP,PRINT
PUSHJ PDP,OCTIN
MOVEM U1,WTERMS
PUSHJ PDP,TERPRI
POPJ PDP,
BTERMS: 777777
WTERMS: 777777
PC: SETZM CFLAG
SETZM BTERMS
SETZM WTERMS
POPJ PDP,
SIG: MOVEI U2,777777
MOVEM U2,BTERMS
MOVEM U2,WTERMS
MOVEM U2,CFLAG
POPJ PDP,
PORT: MOVEI X1,15
CAMN X1,LASCAR ;LASCAR A <CR>?
POPJ PDP, ;YES, SO RETURN FOR SET BOTH
PUSHJ PDP,TYI ;NO, SO GET NEXT CHAR. FROM TTY
CAIN U1," " ;A SPACE?
JRST PORT ;YES, SO TRY AGAIN
AOS (PDP)
AOS (PDP) ;SET RETURN ADDRESS FOR TIP ONLY
CAIN U1,"T" ;"T" FOR "TIP"?
POPJ PDP, ;YES, SO RETURN
AOS (PDP)
AOS (PDP)
CAIN U1,"P" ;"P" FOR "PLAUS"?
POPJ PDP,
AOS (PDP)
AOS (PDP)
POPJ PDP, ;FLITEV RETURN
PDP16: MOVEI U1,[ASCIZ /THE PDP-/]
PUSHJ PDP,PRINT
PUSHJ PDP,MTYPE
PUSHJ PDP,NUMOUT
POPJ PDP,
;BDOUT AGAIN AGAIN1 BDOUT1 BDOUT2 CRLFCK PPLUS BORDER PSTAR PHYFEN PBM PBK PWM PWK
;************************************************************
;BDOUT WILL PRINT OUT THE CURRENT BOARD IN PICTURE FORMAT. *
;BDOUT USES REGISTERS A, P, K, U1, U2, U4, U5, X3, AND X4. *
;REGISTERS A, P, AND K ARE NOT DESTROYED BY BDOUT *
;************************************************************
BDOUT: MOVE A,OA
MOVE P,OP
MOVE K,OK
PUSHJ PDP,TERPRI
SETZB X4,U2
SETZM X3
MOVE U4,A
MOVE U5,P
AND U4,K ;ACTIVE KINGS
AND U5,K ;PASSIVE KINGS
PUSHJ PDP,BORDER
PUSHJ PDP,TERPRI
PUSHJ PDP,PSTAR
AGAIN: PUSHJ PDP,PPLUS ;PRINT + SIGN
TRNN U2,7
JRST CRLFCK
AGAIN1: ROT A,-1
ROT U4,-1
ROT P,-1
ROT U5,-1
TLNN U4,400000 ;BK?
JRST .+3
PUSHJ PDP,PBK
JRST BDOUT1
TLNN A,400000 ;BM?
JRST .+3 ;NO
PUSHJ PDP,PBM
JRST BDOUT1
TLNN U5,400000 ;WK?
JRST .+3 ;NO
PUSHJ PDP,PWK
JRST BDOUT1
TLNN P,400000 ;WM?
JRST .+3 ;NO
PUSHJ PDP,PWM
JRST BDOUT1
PUSHJ PDP,PHYFEN ;EMPTY SQUARE
BDOUT1: AOS X4
CAIN X4,↑D8 ;SHIFT OVER BITS 9, 18, 27
JRST BDOUT2
CAIN X4,↑D17
JRST BDOUT2
CAIE X4,↑D26
JRST CRLFCK
BDOUT2: ROT A,-1
ROT U4,-1
ROT P,-1
ROT U5,-1
AOS X4
CRLFCK: TRNE U2,7 ;DO WE WANT A CR-LF?
JRST AGAIN ;NO
PUSHJ PDP,PSTAR
PUSHJ PDP,TERPRI
SETCMM X3
JUMPGE X3,.+3
PUSHJ PDP,PSTAR
JRST AGAIN1
CAIE U2,↑D64
JRST AGAIN-1
PUSHJ PDP,BORDER
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
ROT A,-1
ROT P,-1
POPJ PDP,
PPLUS: MOVEI U1,[ASCIZ /+ /]
PUSHJ PDP,PRINT
AOS U2
POPJ PDP,
BORDER: MOVEI U1,[ASCIZ /* * * * * * * * * */]
PUSHJ PDP,PRINT
POPJ PDP,
PSTAR: MOVEI U1,[ASCIZ /* /]
PUSHJ PDP,PRINT
POPJ PDP,
PHYFEN: MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
AOS U2
POPJ PDP,
PBM: MOVEI U1,[ASCIZ /B /]
SKIPN SIDE
MOVEI U1,[ASCIZ /W /]
PUSHJ PDP,PRINT
AOS U2
POPJ PDP,
PBK: MOVEI U1,[ASCIZ /BK/]
SKIPN SIDE
MOVEI U1,[ASCIZ /WK/]
PUSHJ PDP,PRINT
AOS U2
POPJ PDP,
PWM: MOVEI U1,[ASCIZ /W /]
SKIPN SIDE
MOVEI U1,[ASCIZ /B /]
PUSHJ PDP,PRINT
AOS U2
POPJ PDP,
PWK: MOVEI U1,[ASCIZ /WK/]
SKIPN SIDE
MOVEI U1,[ASCIZ /BK/]
PUSHJ PDP,PRINT
AOS U2
POPJ PDP,
;BOUT BOUT0 BOUT1 BOUT2 BOUT3
;************************************************************
;BOUT PRINTS THE CURRENT BOARD POSITION ON THE TTY. ONE *
;MUST BEWARE WHEN ONE USES BOUT, FOR IT DESTROYS REGISTERS *
;U1, U2, AND U3 ON WEEKDAYS FROM 1 TO 4 PM. *
;************************************************************
BOUT: MOVE U2,SI ;GET MOVE INDEX
MOVE U4,OA ;GET ACTIVE PIECES
BOUT0: MOVE U5,OK ;& KINGS
PUSHJ PDP,TERPRI
MOVEI U3,1
MOVEI U1,[ASCIZ /B /]
TRNN U2,1 ;BLACK TO PLAY?
MOVEI U1,[ASCIZ /W /] ;NO
PUSHJ PDP,PRINT
LSH U4,1
LSH U5,1
BOUT1: TLNN U4,400000 ;A PIECE THERE?
AOJA U3,.-3 ;NO
PUSHJ PDP,INOUT ;YES, SO PRINT NUMBER
MOVEI X1,"K"
TLNE U5,400000 ;IS PIECE A KING?
PUSHJ PDP,TYO ;YES, SO PRINT "K"
LSH U4,1
LSH U5,1 ;SHIFT TO NEXT POSITION
JUMPE U4,BOUT2 ;JUMP IF NO MORE PIECES
MOVEI X1,"," ;THERE ARE MORE PIECES
PUSHJ PDP,TYO ;SO PRINT COMMA
AOJA U3,BOUT1
BOUT2: TLCE U2,-1 ;FIRST OR SECOND TIME HERE?
JRST BOUT3 ;SECOND, SO EXIT
TRC U2,1
MOVE U4,OP
JRST BOUT0
BOUT3: PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
POPJ PDP,
;LEGM LEGM1 SETLEG EOG TREOUT DSTREE LPTREE TRESET TREFIX TREFI2 TREFI3 TREFIZ TRCHAN TRFILE TREOFF INOUT
;*************************************
;LEGM PRINTS ALL POSSIBLE LEGAL MOVES.
;*************************************
LEGM: SETZM FLAG
MOVEI U3,4
SKIPE U2,ORF
PUSHJ PDP,LEGM1
MOVEI U3,5
SKIPE U2,OLF
PUSHJ PDP,LEGM1
MOVNI U3,4
SKIPE U2,OLB
PUSHJ PDP,LEGM1
MOVNI U3,5
SKIPE U2,ORB
PUSHJ PDP,LEGM1
PUSHJ PDP,TERPRI
POPJ PDP,
LEGM1: SETZM U4
CAIL U4,↑D35
POPJ PDP,
ROT U2,1
AOS U4
TLNN U2,400000
JRST LEGM1+1
MOVEI U1,[ASCIZ /,/]
SKIPE FLAG
PUSHJ PDP,PRINT
MOVE U1,U4
PUSHJ PDP,INOUT+1
MOVEI U1,[ASCIZ /-/]
PUSHJ PDP,PRINT
MOVE U1,U4
ADD U1,U3
SKIPE OJ
ADD U1,U3
PUSHJ PDP,INOUT+1
AOS FLAG
JRST LEGM1+1
;**********************************
;SETLEG SETS UP INITIAL LEGAL MOVES
;**********************************
SETLEG: MOVEM U1,X1S
SETZB X3,SIDE
MOVE A,SI
TRNE A,1
AOS SIDE
MOVE A,SIDE
TRC A,1
MOVEM A,COLOR
MOVE A,OA
MOVE P,OP
MOVE K,OK
SETZM OJ
PUSHJ PDP,LEGAL
JRST EOG
SETOM OJ
MOVE U3,PLRF
MOVEM U3,ORF
MOVE U4,PLLF
MOVEM U4,OLF
MOVE U5,PLLB
MOVEM U5,OLB
MOVE Q,PLRB
MOVEM Q,ORB
MOVE U1,X1S
POPJ PDP,
EOG: MOVEI U1,[ASCIZ /NO LEGAL MOVES./]
JRST PRINT
PAGE
;******************
;SET TREE FLIP-FLOP
;******************
TREOUT: 0 ;Set to -1 below
DSTREE: SETOM TREOUT ;Flag to cause trees to be written out in file
MOVEI U1,1
MOVEM U1,TREE ;Make sure this is set (TRESET is a flipflop)
POPJ PDP,
LPTREE: PUSHJ PDP,LPTFIX ;SEND TREES TO LPT
TRESET: MOVEI U1,1
XORM U1,TREE
POPJ PDP,
TREFIX: MOVE U1,[SIXBIT /001 /]
MOVEM U1,TRFILE+1
TREFI2: OPEN 2,TRCHAN
JRST TREFIZ
MOVE U1,[SIXBIT/CH2ALS/]
MOVEM U1,TRFILE+3
LOOKUP 2,TRFILE
JRST TREFI3
CLOSE 2,
HLLZ U1,TRFILE+1
ADD U1,[1,,0]
MOVEM U1,TRFILE+1
JRST TREFI2
TREFI3: ENTER 2,TRFILE
JRST TREFIZ
OUTBUF 2,4
MOVEI U1,1
MOVEM U1,LPFLAG
POPJ PDP,
TREFIZ: OUTSTR [ASCIZ/TREE initiation error/]
POPJ PDP,
TRCHAN: 1 ;Mode
SIXBIT/DSK /
LPTBUF,,0
TRFILE: SIXBIT/TREE/
SIXBIT/001 /
0
SIXBIT/CH2ALS/
TREOFF: RELEAS 2,
POPJ PDP,
;************************************************
;INOUT CONVERTS AN INTERNAL NUMBER TO AN EXTERNAL
;NUMBER AND PRINTS IT ON THE TTY
;************************************************
INOUT: MOVE U1,U3
CAIL U1,↑D27
SOS U1
CAIL U1,↑D18
SOS U1
CAIL U1,↑D9
SOS U1
PUSHJ PDP,NUMOUT
POPJ PDP,
;PLAYBS PBS D W SETPAR
;********************************************
;PLAYBS WILL HAVE THE MACHINE PLAY BOTH SIDES
;********************************************
PLAYBS: PUSHJ PDP,EOL
SETOM U1
MOVEM U1,STOP
PUSHJ PDP,SCAN
MOVE U1,SI
SETZM SIDE
TRNN U1,1
AOS SIDE
AOS FSTCR
MOVE A,OA
MOVE P,OP
MOVE K,OK
PUSHJ PDP,MKPLAY ;GO PLAY CHECKERS
CALLI U1,20
CAIN U1,012345
POPJ PDP,
TTYUUO 2,U1
JRST .+2
JRST INTERP
MOVE U1,SI
CAME U1,STOP
JRST PBS
MOVEI U1,[034160703400] ;PRINT 4 BELLS
PUSHJ PDP,PRINT
POPJ PDP, ;TIME TO STOP
PBS: MOVEI U1,1
XORM U1,SIDE
JRST PLAYBS+10 ;NOW PLAY OTHERSIDE
PAGE
D: PUSHJ PDP,SCAN ;GET NEXT CHARACTER
SETOM DWFLAG
CAIN U1,"+" ;IS IT A '+'?
AOS DEPTH ;YES
CAIN U1,"-" ;IS IT A '-'?
SOS DEPTH ;YES
TLZE U1,400000 ;IS IT A NUMBER?
MOVEM U1,DEPTH ;YES
POPJ PDP,
W: PUSHJ PDP,SCAN ;GET NEXT CHARACTER
SETOM DWFLAG
CAIN U1,"+" ;IS IT A '+'?
AOS WIDTH ;YES
CAIN U1,"-" ;IS IT A '-'?
SOS WIDTH
TLZE U1,400000 ;IS IT A NUMBER?
MOVEM U1,WIDTH ;YES
POPJ PDP,
SETPAR: PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /DEPTH = /]
PUSHJ PDP,PRINT
PUSHJ PDP,DECIN
MOVEM U1,DEPTH
MOVEI U1,[ASCIZ /TIME = /]
PUSHJ PDP,PRINT
PUSHJ PDP,DECIN
MOVEM U1,TIMEX
MOVEI U1,[ASCIZ /WIDTH = /]
PUSHJ PDP,PRINT
PUSHJ PDP,DECIN
MOVEM U1,WIDTH
MOVEI U1,[ASCIZ /TAPER = /]
PUSHJ PDP,PRINT
PUSHJ PDP,DECIN
MOVEM U1,TAPER
MOVEI U1,[ASCIZ /BLACK = /]
PUSHJ PDP,PRINT
PUSHJ PDP,OCTIN
MOVEM U1,BTERMS
MOVEI U1,[ASCIZ /WHITE = /]
PUSHJ PDP,PRINT
PUSHJ PDP,OCTIN
MOVEM U1,WTERMS
MOVEI U1,[ASCIZ /REPLY = /]
PUSHJ PDP,PRINT
PUSHJ PDP,DECIN
MOVEM U1,REPLYD
MOVEI U1,[ASCIZ /FLIT = /]
PUSHJ PDP,PRINT
PUSHJ PDP,DECIN
MOVEM U1,PLAUSD
MOVEI U1,[ASCIZ /STEM = /]
PUSHJ PDP,PRINT
PUSHJ PDP,DECIN
MOVEM U1,STEMD
MOVEI U1,[ASCIZ /PLAY = /]
PUSHJ PDP,PRINT
PUSHJ PDP,DECIN
MOVEM U1,PLAYD
PUSHJ PDP,TERPRI
POPJ PDP,
;TELPAR REPLYD PLAUSD STEMD PLAYD PLDPT
TELPAR: PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /DEPTH = /]
PUSHJ PDP,PRINT
MOVE U1,DEPTH
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /TIME = /]
PUSHJ PDP,PRINT
MOVE U1,TIMEX
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /WIDTH = /]
PUSHJ PDP,PRINT
MOVE U1,WIDTH
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /TAPER = /]
PUSHJ PDP,PRINT
MOVE U1,TAPER
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /BLACK = /]
PUSHJ PDP,PRINT
MOVE U1,BTERMS
PUSHJ PDP,OCTOUT
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /WHITE = /]
PUSHJ PDP,PRINT
MOVE U1,WTERMS
PUSHJ PDP,OCTOUT
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /REPLY = /]
PUSHJ PDP,PRINT
MOVE U1,REPLYD
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /FLIT = /]
PUSHJ PDP,PRINT
MOVE U1,PLAUSD
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /STEM = /]
PUSHJ PDP,PRINT
MOVE U1,STEMD
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /PLAY = /]
PUSHJ PDP,PRINT
MOVE U1,PLAYD
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
POPJ PDP,
REPLYD: 5
PLAUSD: 2
STEMD: 1
PLAYD: 1
PLDPT: 0
;CSFLAG TELLDW TIME RUNT CRUNT CDIFF DIFFT DIFF TOTAL CTOTAL TELLS TELLS2 NUMIN
CSFLAG: SOS HEADFL
SETCMM SFLAG ;SFLAG IS THE SCORE PRINT OUT FLIP-FLOP
POPJ PDP,
TELLDW: MOVEI U1,[ASCIZ / DEPTH=/]
PUSHJ PDP,PRINT
MOVE U1,DEPTH
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /, WIDTH=/]
PUSHJ PDP,PRINT
MOVE U1,WIDTH
PUSHJ PDP,NUMOUT
SETZM DWFLAG
POPJ PDP,
TIME: Z
TIMEE: Z
RUNT: -1
MOVE U1,TIME
CAIGE U1,↑D1000
JRST RJOUT
IDIVI U1,↑D1000
SETZ X2,
IDIVI U1,↑D60
MOVEM X2,TIMEE
PUSHJ PDP,RJOUT
MOVEI U1,[ASCIZ /:/]
PUSHJ PDP,PRINT
MOVE U1,TIMEE
CAIL U1,12
JRST .+4
MOVEI U1,[ASCIZ /0/]
PUSHJ PDP,PRINT
MOVE U1,TIMEE
JRST NUMOUT
JRST RJOUT
CRUNT: SOS HEADFL
SETCMM RUNT
POPJ PDP,
CDIFF: SETCMM DIFF
POPJ PDP,
DIFFT: Z
DIFF: Z
TOTAL: Z
CTOTAL: SETCMM TOTAL
POPJ PDP,
TELLS: MOVEI U1,[ASCIZ / BKMOVE /]
SKIPN COUNT
JRST .+10
MOVE U1,SCORE
MOVEI X1," "
CAMLE U1,LOSE
PUSHJ PDP,TYO
CAMLE U1,LOSE
JRST TELLS2
MOVEI U1,[ASCIZ / FORCED /]
PUSHJ PDP,PRINT
POPJ PDP,
TELLS2: MOVE U1,SCORE
CAMGE U1,GOOD
JRST TELLS3
MOVNS U1
ADD U1,WIN
ADDI U1,1
PUSHJ PDP,SOUT2
MOVEI U1,[ASCIZ / MOVE WIN./]
PUSHJ PDP,PRINT
POPJ PDP,
TELLS3: ASH U1,-5
ADDI U1,200 ;CONTERACT NEG. EVA
MOVEM U1,U1S#
ASH U1,-10
PUSHJ PDP,RJOUT ;PIECE COUNT
MOVE U1,U1S
ANDI U1,377
SUBI U1,200
PUSHJ PDP,RJOUT ;EVA PORTION
MOVE U1,SCORE
JUMPLE U1,.+5
ANDI U1,37
MOVNS U1
ADDI U1,40
SKIPA
ANDI U1,37
PUSHJ PDP,RJOUT
POPJ PDP,
NUMIN: PUSHJ PDP,SCAN ;SCAN NEXT SYMBOL
JUMPGE U1,NUMIN ;JUMP IF NOT A NUMBER.
HRRZ U2,U1 ;GET VALUE.
PUSHJ PDP,OUTIN ;FIX THE NUMBER
POPJ PDP, ;TRA 1,4
;FSTCR CRFST
FSTCR: 0
CRFST: SKIPE FSTCR
POPJ PDP,
SETZM SIDE
MOVE A,OA
MOVE P,OP
MOVE K,OK
PUSHJ PDP,TERPRI
PUSHJ PDP,PDP16
MOVEI U1,[ASCIZ / WILL PLAY BLACK./]
MOVE X1,SI
TRNN X1,1
AOS SIDE
TRNN X1,1
MOVEI U1,[ASCIZ / WILL PLAY WHITE./]
PUSHJ PDP,PRINT
PUSHJ PDP,SAVBD
PUSHJ PDP,TERPRI
AOS FSTCR
JRST MKPLAY
;MUP RF LF LB
MUP: MOVE A,MA-10(X1)
SKIPN A
POPJ PDP,
MOVE P,MP-10(X1)
MOVE K,MK-10(X1)
MOVEM A,MOVAA ;TREE DATA
MOVE U1,[POINT 4,MJ]
MOVEM U1,MJBP ;INIT BYTE POINTER
MOVE U1,[POINT 6,MJBP,5]
MOVEM U1,BPBP ;INIT BYTE POINTER'S BYTE POINTER
SKIPE U1,MRF-10(X1)
JRST RF
SKIPE U1,MLF-10(X1)
JRST LF
SKIPE U1,MLB-10(X1)
JRST LB
SKIPN U1,MRB-10(X1)
POPJ PDP, ;NO MOVE RETURN
MOVEM U1,SAVE
HRLI I,MRB-10(X1)
HRRI I,4300 ;RB FLAG BIT IN I
SUBI U1,1
ANDM U1,MRB-10(X1) ;CORRECTED RB WORD WITH MOVE BIT GONE
ADDI U1,1
XOR U1,MRB-10(X1) ;MOVE BIT ONLY IN U1
MOVEI U2,5 ;MAGIC NUMBER IN U2
JRST UPDATE
RF: MOVEM U1,SAVE
HRLI I,MRF-10(X1)
HRRI I,700 ;RF FLAG BIT IN I
SUBI U1,1
ANDM U1,MRF-10(X1) ;CORRECTED RF WORD WITH MOVE BIT GONE
ADDI U1,1
XOR U1,MRF-10(X1) ;MOVE BIT ONLY IN U1
MOVEI U2,-4 ;MAGIC NUMBER IN U2
JRST UPDATE
LF: MOVEM U1,SAVE
HRLI I,MLF-10(X1)
HRRI I,1300 ;LF FLAG BIT IN I
SUBI U1,1
ANDM U1,MLF-10(X1) ;CORRECTED LF WORD WITH MOVE BIT GONE
ADDI U1,1
XOR U1,MLF-10(X1) ;MOVE BIT ONLY IN U1
MOVEI U2,-5 ;MAGIC NUMBER IN U2
JRST UPDATE
LB: MOVEM U1,SAVE
HRLI I,MLB-10(X1)
HRRI I,2300 ;LB FLAG BIT IN I
SUBI U1,1
ANDM U1,MLB-10(X1) ;CORRECTED LB WORD WITH MOVE BIT GONE
ADDI U1,1
XOR U1,MLB-10(X1) ;MOVE BIT ONLY IN U1
MOVEI U2,4 ;MAGIC NUMBER IN U2
JRST UPDATE
;OVUP OVUPRF OVUPLF OVUPLB
OVUP: MOVE A,OVA(X1)
SKIPN A
POPJ PDP,
MOVE P,OVP(X1)
MOVE K,OVK(X1)
MOVEM A,MOVAA ;TREE DATA
MOVE U1,[POINT 4,MJ]
MOVEM U1,MJBP ;INIT BYTE POINTER
MOVE U1,[POINT 6,MJBP,5]
MOVEM U1,BPBP ;INIT BYTE POINTER'S BYTE POINTER
SKIPE U1,OVRF(X1)
JRST OVUPRF
SKIPE U1,OVLF(X1)
JRST OVUPLF
SKIPE U1,OVLB(X1)
JRST OVUPLB
SKIPN U1,OVRB(X1)
POPJ PDP, ;NO MOVE RETURN
MOVEM U1,SAVE
HRLI I,OVRB(X1)
HRRI I,4300 ;RB FLAG BIT IN I
SUBI U1,1
ANDM U1,OVRB(X1) ;CORRECTED RB WORD WITH MOVE BIT GONE
ADDI U1,1
XOR U1,OVRB(X1) ;MOVE BIT ONLY IN U1
MOVEI U2,5 ;MAGIC NUMBER IN U2
JRST UPDATE
OVUPRF: MOVEM U1,SAVE
HRLI I,OVRF(X1)
HRRI I,700 ;RF FLAG BIT IN I
SUBI U1,1
ANDM U1,OVRF(X1) ;CORRECTED RF WORD WITH MOVE BIT GONE
ADDI U1,1
XOR U1,OVRF(X1) ;MOVE BIT ONLY IN U1
MOVEI U2,-4 ;MAGIC NUMBER IN U2
JRST UPDATE
OVUPLF: MOVEM U1,SAVE
HRLI I,OVLF(X1)
HRRI I,1300 ;LF FLAG BIT IN I
SUBI U1,1
ANDM U1,OVLF(X1) ;CORRECTED LF WORD WITH MOVE BIT GONE
ADDI U1,1
XOR U1,OVLF(X1) ;MOVE BIT ONLY IN U1
MOVEI U2,-5 ;MAGIC NUMBER IN U2
JRST UPDATE
OVUPLB: MOVEM U1,SAVE
HRLI I,OVLB(X1)
HRRI I,2300 ;LB FLAG BIT IN I
SUBI U1,1
ANDM U1,OVLB(X1) ;CORRECTED LB WORD WITH MOVE BIT GONE
ADDI U1,1
XOR U1,OVLB(X1) ;MOVE BIT ONLY IN U1
MOVEI U2,4 ;MAGIC NUMBER IN U2
JRST UPDATE
;MACROS FOR SIGNATURE_TABLES
DEFINE MAC1 (S) <;OUTER MACRO
SETZ U1,
MAC2 \<3*S-2>
ASH U2,↑D12
ADDM U2,U2SAV
IMULI U1,5
MAC2 \<3*S-1>
ASH U2,6
ADDM U2,U2SAV
IMULI U1,5
MAC2 \<3*S>
ADDM U2,U2SAV
ADD U5,SIGT2'S(U1)>
DEFINE MAC2 (SC) <;CENTRAL MACRO
MAC3 1
MOVE U2,Q
IMULI U2,3
MAC3 1
ADD U2,Q
IMULI U2,5
MAC3 2
ADD U2,Q
ADD U1,SIGT1'SC(U2)>
DEFINE MAC3 (C) <;INNER MACRO
SETZB Q,P
LSHC Q,4
LSHC P,4
SUB Q,P
CAILE Q,C
MOVEI Q,C
CAMGE Q,NEG+C
MOVNI Q,C>
;NEG DATA DATA2 DATA3 U2SAV ZZZ BZZ FLZZZ NUM1
NEG: 0 ;NEGATION TABLE
-1
-2
-3
-4
-5
-6
-7
-10
INTERN DATA
EXTERN NUM2,NUM3
DATA: MOVE X4,PHASE
IMULI X4,↑D18
MOVEI U1,[ASCIZ / TERM DATA FOR PHASE /]
PUSHJ PDP,PRINT
MOVE U1,PHASE
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
REPEAT 3,< MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
REPEAT 6,< XCT TLIST(X4)
ADDI X4,3
PUSHJ PDP,PRINT>
SUBI X4,↑D17
PUSHJ PDP,TERPRI>
SETZ X4,
MOVEI U1,[ASCIZ /TRUNK PIECE EVAL/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
DATA2: SKIPN U2,MOVES(X4)
JRST TERPRI
HLRZ U1,U2
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /-/]
PUSHJ PDP,PRINT
HRRZ U1,U2
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVE U1,FLZZ(X4)
PUSHJ PDP,TELLS2+1
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVEI U3,6
DATA3: SETZ U1,
MOVE X2,FLZZZ(X4)
LSHC U1,6
MOVEM X2,FLZZZ(X4)
IDIVI U1,5
MOVEM X2,X2SS
IDIVI U1,3
MOVEM X2,X2S
SUBI U1,1
PUSHJ PDP,NUM1
MOVE U1,X2S
SUBI U1,1
PUSHJ PDP,NUM1
MOVE U1,X2SS
SUBI U1,2
PUSHJ PDP,NUM1
SOJLE U3,.+4
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
JRST DATA3
PUSHJ PDP,TERPRI
AOJA X4,DATA2
U2SAV: Z ;TEMP SAVE OF U2
ZZZ: BLOCK 20 ;TERM SCORE IN PL
BZZ: BLOCK 20
FLZZZ: BLOCK 20
NUM4: CAIGE U1,144
CAMG U1,[-144]
JRST .+3
MOVEI X1," "
PUSHJ PDP,TYO
CAIGE U1,12
CAMG U1,[-12]
JRST .+3
MOVEI X1," "
PUSHJ PDP,TYO
NUM1: JUMPL U1,NUM2
MOVEI X1," "
PUSHJ PDP,TYO
JRST NUM3
;SGT5 SGT5A SGT5B SGT5C SGT3 SGT3A SGTOT TABFIX TABFI2 TABFI3 TABFIZ TBCHAN TBFILE TABLST TAB2 TAB3 TAB3A TAB3B TAB4 TAB4B TAB5 TAB8 TAB7 TAB6 TAB20 TAB20A TAB20B TAB21 TAB22 TAB23 TAB24 TAB25 TAB26 TAB27 TAB31 TAB32 TAB33 TAB34
;Register assignments
; X1 Gets used in NUM1
; U1 Address of ASCIZ to print
; X2 Gets used in some subroutine
; U2 -2 -1 0 1 2 Numbers for headings, Index for 1st 3-range term
; X3 Index between tables
; U3 Index to 5 for 5-range terms
; X4 TLIST index for names
; U4 Repeat count
; X5 Index into EVAL table
; U5 Phase
; Q Index for 2nd 3-range term
SGT5: BLOCK 5 ;5-range term totals
SGT5A: BLOCK 5 ;5-range term totals (for second level)
SGT5B: BLOCK 5 ;5-range term totals (for second level)
SGT5C: BLOCK ↑D15 ;15-range term totals (for third level)
SGT3: BLOCK 3 ;1st 3-range term totals
SGT3A: BLOCK 3 ;2nd 3-range term totals
SGTOT: 0 ;Total for 1st level table
;Routine to list Signature Tables in a file called SIGTAB.001 etc.
TABFIX:
MOVE U1,[SIXBIT /001 /]
MOVEM U1,TBFILE+1
TABFI2: OPEN 2,TBCHAN
JRST TABFIZ
MOVE U1,[SIXBIT/CH2ALS/]
MOVEM U1,TBFILE+3
LOOKUP 2,TBFILE
JRST TABFI3
CLOSE 2,
HLLZ U1,TBFILE+1
ADD U1,[1,,0]
MOVEM U1,TBFILE+1
JRST TABFI2
TABFI3: ENTER 2,TBFILE
JRST TABFIZ
OUTBUF 2,4
MOVEI U1,1
EXCH U1,LPFLAG
MOVEM U1,LPFLAS#
PUSHJ PDP,TABLST
RELEAS 2,
MOVE U1,LPFLAS
MOVEM U1,LPFLAG
POPJ PDP,
TABFIZ: OUTSTR [ASCIZ/SIGTAB initiation error/]
POPJ PDP,
TBCHAN: 1 ;Mode
SIXBIT/DSK /
LPTBUF,,0
TBFILE: SIXBIT/SIGTAB/
SIXBIT/001 /
0
SIXBIT/CH2ALS/
;Routine to list Signature Tables (on line when here or to file if from TABFIX)
TABLST: MOVEI U5,0
SETOM SIGN0 ;To insure loading
PUSHJ PDP,PHASFI
MOVEI U1,[ASCIZ / Signature Tables after /]
PUSHJ PDP,PRINT
MOVE U1,LABEL
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / boards
/]
PUSHJ PDP,PRINT
MOVEI U5,3 ;Start with phase 3
TAB2: PUSHJ PDP,PHASFI
MOVEI U1,[ASCIZ / Tables for Phase /]
PUSHJ PDP,PRINT
MOVE U1,U5
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVE U2,LABEL+2
ADD U2,LABEL+3
ADD U2,LABEL+4
MOVE U1,LABEL+3
ASH U1,-1
ADD U1,LABEL+2
IMULI U1,1750
IDIV U1,U2
IDIVI U1,12
MOVE U2,X2
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /./]
PUSHJ PDP,PRINT
MOVE U1,U2
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
SETZ X5, ;To index through EVAL11
MOVEI X3,6 ;Number of first level tables
MOVE X4,U5
IMULI X4,↑D18 ;18 names per phase
TAB3: PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /↓/]
PUSHJ PDP,PRINT
XCT TLIST(X4) ;The 1st 3-range term name
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
XCT TLIST+1(X4) ;The second range-3 term name
PUSHJ PDP,PRINT
MOVEI U1,[ASCIZ / -1 0 +1
/]
PUSHJ PDP,PRINT
XCT TLIST+2(X4) ;The range-5 term name
PUSHJ PDP,PRINT
MOVEI U4,3
TAB3A: MOVNI U2,2 ;Now print -2 -1 0 1 2 three times
TAB3B: MOVE U1,U2 ;Start line with a -1, 0 or 1
PUSHJ PDP,NUM1
; MOVEI U1,[ASCIZ / /]
; PUSHJ PDP,PRINT
CAIGE U2,2
AOJA U2,TAB3B
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJG U4,TAB3A
PUSHJ PDP,TERPRI
MOVEI U2,3
SETZM SGT3(U2)
SETZM SGT3A(U2)
SOJG U2,.-2
MOVEI U3,5
SETZM SGT5(U3)
SOJG U3,.-1
SETZM SGTOT
MOVEI Q,2
MOVNI U4,1 ;The 3 lines of data start with -1, 0, and 1
TAB4: PUSHJ PDP,TERPRI
MOVE U1,U4
PUSHJ PDP,NUM1
AOS U4
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVEI U2,2
TAB4B: MOVEI U3,4
TAB5: MOVE U1,EVAL11(X5)
ADDM U1,SGT5(U3)
ADDM U1,SGT3(U2)
ADDM U1,SGT3A(Q)
ADDM U1,SGTOT
PUSHJ PDP,NUM1
AOS X5
SOJGE U3,TAB5
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJGE U2,TAB4B
SOJGE Q,TAB4
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /
Total /]
PUSHJ PDP,PRINT
MOVE U1,SGTOT
PUSHJ PDP,NUMOUT
SETZM SGTOT
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
XCT TLIST(X4) ;The first range-3 term name
PUSHJ PDP,PRINT
MOVEI Q,2
TAB8: MOVE U1,SGT3A(Q)
PUSHJ PDP,NUM1
SETZM SGT3A(Q)
SOJGE Q,TAB8
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
XCT TLIST+1(X4) ;The 2nd 3-range term name
PUSHJ PDP,PRINT
MOVEI U2,2
TAB7: MOVE U1,SGT3(U2)
PUSHJ PDP,NUM1
SETZM SGT3(U2)
SOJGE U2,TAB7
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
XCT TLIST+2(X4) ;The 5-range term name
PUSHJ PDP,PRINT
MOVEI U3,4
TAB6: MOVE U1,SGT5(U3)
PUSHJ PDP,NUM1
SETZM SGT5(U3)
SOJGE U3,TAB6
PUSHJ PDP,TERPRI
ADDI X4,3 ;3 names farther along
SOJG X3,TAB3 ;Now for the next first level table
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
TAB20: MOVEI U1,[ASCIZ / Second level
/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
SETZ X5, ;To index through EVAL21
MOVEI X3,2 ;Number of second level tables
MOVE X4,U5
IMULI X4,↑D18 ;18 names per phase
TAB20A: MOVEI U2,3
MOVEI U1,[ASCIZ /↓/]
PUSHJ PDP,PRINT
XCT TLIST(X4)
PUSHJ PDP,PRINT
AOS X4
SOJG U2,.-3
PUSHJ PDP,TERPRI
MOVEI U2,3
XCT TLIST(X4)
PUSHJ PDP,PRINT
AOS X4
SOJG U2,.-3
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVNI U2,2
TAB20B: MOVE U1,U2
PUSHJ PDP,NUM1
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
AOS U2
CAIG U2,2
JRST TAB20B
PUSHJ PDP,TERPRI
MOVEI U2,3
XCT TLIST(X4)
PUSHJ PDP,PRINT
AOS X4
SOJG U2,.-3
PUSHJ PDP,TERPRI
MOVEI U2,5
MOVEI U1,[ASCIZ /-2-1 0 1 2 /]
PUSHJ PDP,PRINT
SOJG U2,.-2
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
TAB21: MOVEI U2,4
SETZM SGT5(U2)
SETZM SGT5A(U2)
SETZM SGT5B(U2)
SOJGE U2,.-3
MOVEI U2,4
TAB22: MOVEI U3,4
TAB23: MOVEI Q,4
TAB24: MOVE U1,EVAL21(X5)
ADDM U1,SGT5(U2)
ADDM U1,SGT5A(U3)
ADDM U1,SGT5B(Q)
ADDM U1,SGTOT
PUSHJ PDP,NUM1
AOS X5
; MOVEI U1,[ASCIZ / /]
; PUSHJ PDP,PRINT
SOJGE Q,TAB24
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJGE U3,TAB23
PUSHJ PDP,TERPRI
SOJGE U2,TAB22
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /Total /]
PUSHJ PDP,PRINT
MOVE U1,SGTOT
PUSHJ PDP,NUMOUT
SETZM SGTOT
PUSHJ PDP,TERPRI
MOVEI U2,4
TAB25: MOVE U1,SGT5(U2)
PUSHJ PDP,NUM1
SETZM SGT5(U2)
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJGE U2,TAB25
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVEI U2,4
TAB26: MOVE U1,SGT5A(U2)
PUSHJ PDP,NUM1
SETZM SGT5A(U2)
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJGE U2,TAB26
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVEI U2,4
TAB27: MOVE U1,SGT5B(U2)
PUSHJ PDP,NUM1
SETZM SGT5B(U2)
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJGE U2,TAB27
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
SOJG X3,TAB20A
MOVEI U1,[ASCIZ / Third level/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
SETZ X5, ;To index through EVALF
MOVEI U2,↑D14
TAB31: MOVEI U3,↑D14
TAB32: MOVE U1,EVALF(X5)
ADDM U1,SGT5(U2)
ADDM U1,SGT5C(U3)
ADDM U1,SGTOT
PUSHJ PDP,NUM4
AOS X5
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJGE U3,TAB32
PUSHJ PDP,TERPRI
SOJGE U2,TAB31
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /Total /]
PUSHJ PDP,PRINT
MOVE U1,SGTOT
PUSHJ PDP,NUMOUT
SETZM SGTOT
MOVEI U1,[ASCIZ /
Term averages
/]
PUSHJ PDP,PRINT
MOVEI U2,↑D14
TAB33: MOVE U1,SGT5(U2)
IDIVI U1,↑D15
PUSHJ PDP,NUM4
SETZM SGT5(U2)
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJGE U2,TAB33
PUSHJ PDP,TERPRI
MOVEI U2,↑D14
TAB34: MOVE U1,SGT5C(U2)
IDIVI U1,↑D15
PUSHJ PDP,NUM4
SETZM SGT5C(U2)
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJGE U2,TAB34
PUSHJ PDP,TERPRI
MOVEI X1,14 ;A FF
PUSHJ PDP,TYO
SOJGE U5,TAB2 ;Now for the next phase
POPJ PDP,
;EVA LEV1 CFC CFA1 CFA3 PHASFI DSKERR
EVA: MOVEM X1,CFZ1Z# ;SAVE X1
; SETZM X1
; CALL X1,[SIXBIT /RUNTIME/]
; MOVEM X1,EVTIM0 ;Save entering time
PUSHJ PDP,PCCNT ;COUNT PIECES
MOVE U4,CFLAG ;SEE WHAT KIND OF EVALUATION TO DO
JUMPE U4,CFA1
LEV1: MOVE A,EEB(X3)
MOVE K,EEB-1(X3)
SETZB U5,U2SAV
MAC1 1
IMULI U5,17
HRLZS U2SAV
MOVE A,EEB2(X3)
MOVE K,EEB2-1(X3)
MAC1 2
MOVE Z,SIGTF(U5) ;GET FINAL SCORE
CFC: ADD Z,U3 ;ADD IN PIECE-COUNT TO SCORE
MOVE X1,PLY(X2) ;PLY AT WHICH TIP WAS ENTERED
ADD X1,X3 ;PLUS PLY IN TIP GIVES TRUE PLY
SUBI X1,40
ASH Z,5
SKIPL Z
MOVNS X1
ADD Z,X1 ;ADD PLY TO SCORE
; SETZM X1
; CALL X1,[SIXBIT /RUNTIME/]
; SUB X1,EVTIM0
; ADDM X1,EVTIMT
MOVE X1,CFZ1Z ;RESTORE X1 FOR RETURN
POPJ PDP, ;RETURN--SCORE IS LEFT IN Z
CFA1: MOVE Z,U3 ;THIS IS ONLY EXECUTED IF CFLAG=0
MOVE X1,PLY(X2)
ADD X1,X3
SUBI X1,77
SKIPL Z
MOVNS X1
ADD Z,X1
CFA3: MOVE X1,CFZ1Z ;RESTORE X1 FOR RETURN
POPJ PDP, ;RETURN--SCORE IS LEFT IN Z
EVTIM0: Z ;Entering EVA time
EVTIMT: Z ;Total EVA time
PHASFI: MOVE U1,SIG0(U5)
CAMN U1,SIGN0
POPJ PDP, ;CORRECT SIG VALUES ALREADY IN
MOVEM U1,SIGN0
INIT 7,17
SIXBIT /DSK/
Z
JRST DSKERR
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGN0+1
MOVE U1,[055000000000]
MOVEM U1,SIGN0+2
MOVE U1,[SIXBIT /CH2ALS/]
MOVEM U1,SIGN0+3
LOOKUP 7,SIGN0
JRST DSKERR
INPUT 7,SIGT0
RELEAS 7,
POPJ PDP,
DSKERR: MOVEI U1,[ASCIZ /TRY AGAIN/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
;SIGT0 SIGN0 SIG0 LABEL EVAL11 SIGT11 EVAL12 SIGT12 EVAL13 SIGT13 EVAL14 SIGT14 EVAL15 SIGT15 EVAL16 SIGT16 EVAL21 SIGT21 EVAL22 SIGT22 EVALF SIGTF TTABLE
SIGSIZ=1356 ;MUST AGREE WITH CKL
SIGT0: IOWD SIGSIZ,LABEL
Z
SIGN0: SIXBIT /Z/ ;Z TO INSURE FILLING FIRST TIME
SIXBIT /DAT/
055000000000
SIXBIT /CH2ALS/
SIG0: SIXBIT /SIGT0/
SIXBIT /SIGT1/
SIXBIT /SIGT2/
SIXBIT /SIGT3/
LABEL: BLOCK 5
EVAL11: BLOCK 26 ;SIGNATURE TABLES
SIGT11: BLOCK 27 ;LABEL IS CENTERED IN TABLE TO ALLOW NEGATIVE SUBSCRIPTS
EVAL12: BLOCK 26
SIGT12: BLOCK 27
EVAL13: BLOCK 26
SIGT13: BLOCK 27
EVAL14: BLOCK 26
SIGT14: BLOCK 27
EVAL15: BLOCK 26
SIGT15: BLOCK 27
EVAL16: BLOCK 26
SIGT16: BLOCK 27
EVAL21: BLOCK 76
SIGT21: BLOCK 77
EVAL22: BLOCK 76
SIGT22: BLOCK 77
EVALF: BLOCK 160
SIGTF: BLOCK 161
TTABLE: BLOCK 22 ;SPACE FOR T VALUES
BLOWUP=10 ;MUST CORRESPOND WITH VALUE IN CKL
INPSIZ=↑D1020 ;DIVISABLE BY 6 AND <1024
;FINMOV FINMO2 FOUNDM BWINMV FOUNDN CHOICE FINMO3
FINMOV: PUSHJ PDP,FINDFI ;GET FILE NAME
PUSHJ PDP,GETFIL ;AND GET NEW FILE
FINMO2: PUSHJ PDP,FINDX1 ;GET LINE ENTRY
JRST FINMO3 ;NOT FOUND BUT WHY
FOUNDM: MOVE X5,INPA(X1)
PUSHJ PDP,EXBITS
SKIPN X5
POPJ PDP, ;IGNORE 0-0 BOARDS
MOVEM X5,X4
JUMPE U4,FOUNDN ;NO KING CASE
MOVE X5,INPP(X1)
PUSHJ PDP,EXBITS
MOVE Z,X5
MOVE X5,INPK(X1)
PUSHJ PDP,EXBITS
LSH Z,4
IORB X5,Z
JUMPE X5,CHOICE ;DRAW MOVE
SKIPE WONFLG ;HAVE WE PRINTED MESSAGE
JRST CHOICE ;YES
SETOM WONFLG
TRNE Z,1
JRST BWINMV
MOVEI U1,[ASCIZ /YOU HAVE A POSSIBLE WIN IN /]
PUSHJ PDP,PRINT
MOVE U1,Z
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / MOVES! GOOD LUCK./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST CHOICE
BWINMV: MOVEI U1,[ASCIZ /THE PDP-10 MAY WIN IN /]
PUSHJ PDP,PRINT
MOVE U1,Z
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / MOVES./]
PUSHJ PDP,TERPRI
JRST CHOICE
FOUNDN: MOVE X5,INPP(X1)
PUSHJ PDP,EXBITS
JUMPE X5,CHOICE
CALL U1,[SIXBIT /MSTIME/] ;FLIT A COIN
TRNN U1,1
MOVEM X5,X4
CHOICE: SKIPN COLOR
JRST .+10
MOVEI U1,1
CAMN X4,X4TAB(U1)
JRST .+4
CAIGE U1,17
AOJA U1,.-3
POPJ PDP, ;ERROR EXIT
MOVE X4,U1
SUBI X4,1 ;COUNT FROM ZERO
MOVEM X4,MOVX ;REPORT MOVE
POP PDP,(PDP) ;BYPASS FIRST RETURN
SETZM COUNT ;BOOK MOVE SIGNAL
JRST EXIT1
FINMO3: CAIGE X1,INPSIZ ;IS THIS THE RIGHT FILE
POPJ PDP, ;YES BUT NOT THERE
MOVE U1,DSKBKM ;NO SO TRY NEXT FILE
SUB U1,[000100000000]
PUSHJ PDP,GETFIA
JRST FINMO2 ;THIS MAX BE IT
BK: PUSHJ PDP,SETLEG
PUSHJ PDP,FINDFI ;GET FILE NAME
PUSHJ PDP,GETFIL ;AND GET NEW FILE
BK2: PUSHJ PDP,FINDX1 ;GET LINE ENTRY
JRST BK4 ;NOT FOUND BUT WHY
MOVE X5,INPA(X1)
PUSHJ PDP,EXBITS
MOVE X4,X5
JUMPE X4,BK5
OUTSTR [ASCIZ/BK moves are: /]
PUSHJ PDP,BK6
MOVE X5,INPP(X1)
PUSHJ PDP,EXBITS
MOVE X4,X5
JUMPE K,BK3
MOVE X5,INPK(X1)
PUSHJ PDP,EXBITS
LSH X4,4
IORB X5,X4
JUMPE X5,BK3A
TRNE X4,1
JRST BK2A
OUTSTR [ASCIZ/loses in /]
SKIPA
BK2A: OUTSTR [ASCIZ/wins in /]
MOVE U1,X4
PUSHJ PDP,NUMOUT
OUTSTR [ASCIZ/ moves.
/]
POPJ PDP,
BK3: SKIPE X4
PUSHJ PDP,BK6
BK3A: PUSHJ PDP,TERPRI
POPJ PDP,
BK6: SKIPN COLOR
JRST BK6A
MOVEI U1,1
CAMN X4,X4TAB(U1)
JRST .+4
CAIGE U1,17
AOJA U1,.-3
JRST BK6A
MOVE X4,U1
BK6A: SUBI X4,1
MOVE U5,MOP(X4)
XOR U5,A
MOVE Z,U5
AND Z,MOP(X4)
XOR U5,Z
PUSHJ PDP,FIND
PUSHJ PDP,NUMOUT
OUTSTR [ASCIZ/-/]
MOVE U5,Z
PUSHJ PDP,FIND
PUSHJ PDP,NUMOUT
OUTSTR [ASCIZ/ /]
POPJ PDP,
BK4: CAIGE X1,INPSIZ ;IS THIS THE RIGHT FILE
JRST BK5 ;YES BUT NOT THERE
MOVE U1,DSKBKM ;NO SO TRY NEXT FILE
SUB U1,[000100000000]
PUSHJ PDP,GETFIA
JRST BK2 ;THIS MAX BE IT
BK5: OUTSTR [ASCIZ/No book move found.
/]
POPJ PDP,
;EXBITS DSKBKM BKMIN INPA BKMOVE BOOKA BOOKP BOOKK BOOKM BOOKI FILEIN GETFIL SAV0 GETFIA MESS
EXBITS: LSHC X5,-11 ;EXTRACT GUARD BITS
LSH X5,-10
LSHC X5,-1
LSH X5,-10
LSHC X5,-1
LSH X5,-10
LSHC X5,3
POPJ PDP,
DSKBKM: Z
SIXBIT /CHK/
055000000000
SIXBIT /CH3ALS/
BKMIN: IOWD INPSIZ,INPA
Z
INPA: BLOCK INPSIZ
INPP=INPA+1
INPK=INPA+2
Z
BKMOVE: Z
BOOKA:
BOOKP:
BOOKK:
BOOKM:
BOOKI:
FILEIN: Z
GETFIL: LDB U1,[POINT 5,U2,29]
LDB U3,[POINT 5,U2,35]
MOVE U1,CRIP(U1)
LSH U1,14
IOR U1,CRIP(U3)
TRNN U2,10000 ;TEST K BIT
IOR U1,[SIXBIT /MA/]
TRNE U2,10000 ;TEST AGAIN
IOR U1,[SIXBIT /KA/] ;KING BOARDS
SETZ X5,
SKIPE U5,WHERE(X5)
JRST .+3
POP PDP,(PDP)
POPJ PDP,
CAMN U2,U5 ;CHECK MAJOR NAME
JRST .+3
ADDI X5,BLOWUP+1
JRST .-7
SKIPN COLOR
JRST SAV0
MOVEM U1,U1S#
PUSHJ PDP,REVERA
MOVEM Z,U2
PUSHJ PDP,REVERP
MOVEM Z,U3
PUSHJ PDP,REVERK
MOVEM Z,U4
MOVE U1,U1S
JRST .+4
SAV0: MOVEM A,U2
MOVEM P,U3
MOVEM K,U4
MOVEI U5,10 ;TO COUNT MINORS
CAML U2,WHERE+1(X5)
JRST GETFIA
ADDI X5,1
ADD U1,[000100000000]
SOJG U5,.-4
POP PDP,(PDP) ;NOT FOUND
POPJ PDP,
GETFIA: CAMN U1,DSKBKM ;COMPARE WITH OLD VALUE
POPJ PDP, ;FILE ALREADY IN
MOVE U5,DSKBKM
MOVEM U5,DSKBK2# ;SAVE TEMPORARILY
MOVEM U1,DSKBKM
MOVE U1,[SIXBIT /CHK/]
MOVEM U1,DSKBKM+1
MOVE U1,[055000000000]
MOVEM U1,DSKBKM+2
MOVE U1,[SIXBIT /CH3ALS/]
MOVEM U1,DSKBKM+3
INIT 12,17
SIXBIT /DSK/
Z
HALT
LOOKUP 12,DSKBKM
JRST .+4 ;ERROR
INPUT 12,BKMIN
RELEAS 12,
POPJ PDP,
MOVE U1,DSKBK2
MOVEM U1,DSKBKM ;RESTORE FORMER VALUE
POP PDP,(PDP)
POPJ PDP, ;NOT FOUND
MESS: ASCIZ /
CHECKERS. BLACK PIECES GO ON LOW NUMBERS AND BLACK PLAYS FIRST. ENTER
MOVE (EXAMPLE 11-15) GIVE CR AND WAIT FOR REPLY. CR ONLY CAUSES PDP
TO PLAY BLACK. JUMPS MUST BE TAKEN. TYPE I FOR MORE INFORMATION.
/
END